2014-06-05 93 views
0

我是django的初学者,所以请裸露在我身边。所以,我想从模板(下拉窗体)传递一些变量到视图函数。视图功能是不一样的,它有不同的视图功能。我在stackoverflow上看到类似的问题,但无法找出解决方案,因为我想在这里发布我的问题。对不起,如果有重复。将变量从模板传递到视图函数django

以下是views.py

from django.shortcuts import get_object_or_404, render 
from django.http import Http404, HttpResponse, HttpResponseRedirect 
from polls.models import Choice, Poll 
from django.core.urlresolvers import reverse 
from django.template import RequestContext, loader 
from django.views import generic 
from django.core.files import File 
import os 

#a = [] 
#c = [] 
def table(request,host,port): 
#  host = request.GET['servers'] 
#  port = request.GET['instances'] 
#  os.system("redis-cli -h %(host)s -p %(port)s info > /home/ravi/python/info_file/%(host)s_%(port)s.txt" % locals()) 
     os.system("redis-cli -h %(host)s -p %(port)s info > /home/ravi/python/info_file/%(host)s_%(port)s.txt" % locals()) 
     with open('/home/ravi/python/info_file/%(host)s_%(port)s.txt' % locals()) as f: 
       a = [] 
       c = [] 
       for line in f: 
         if not line.startswith('#'): 
#        line = line.strip() 
           if line.strip(): 
             b = line.split(':', 1) 
             a.append(b[0]) 
             c.append(b[1]) 
       context = { 'key': a, 'value': c } 
     return render(request, 'polls/table.html', context) 
     f.close() 

def redis(request): 
     print "I am here" 
     #print request.GET['servers'] 
     return render(request, 'polls/redis.html') 

以下是模板。

redis.html

<form action="{% url polls:table %} " method="get"> 
     <select name="servers"> 
       <option value="" disabled="disabled" selected="selected">Please select the server</option> 
       <option value="x.x.x.x">server_name</option> 
       <option value="x.x.x.x">server_name</option> 
     </select> 

     <select name="instances"> 
       <option value="" disabled="disabled" selected="selected">Please select the redis instance</option> 
       <option value="port">redis_instance</option> 
       <option value="port">redis_instance</option> 
     </select> 
     <input type="submit" value="Submit"> 

</form> 

第二个模板。

table.html

{% load multifor %} 
{% if key %} 
    <table border="1" style="width:300px"> 
    {% for x in key; y in value %} 
     <tr> 
      <!-- <td>{{ x }}</td> --> 
      <td>{{ x }}</td> 
      <td>{{ y }}</td> 
     </tr> 
    {% endfor %} 
    </table> 
{% else %} 
    <p>No info available for this instance.</p> 
{% endif %} 

以下是我的urls.py

** 

from django.conf.urls import patterns, url 

    from polls import views 

    urlpatterns = patterns('', 

     url(r'^$', views.redis, name='redis'), 
     url(r'^index/$', views.table, name='table'), 
    ) 

**

所以基本上,生病负荷redis.html首先在我的本地主机,这将显示两个下拉框和一个提交按钮。我想将下拉框中选定的值发送到views.table()函数。我知道一件事,我必须通过网址传递值,但我无法做到这一点。

必须有一些愚蠢的,我在这里失踪,但请帮助我。我困在此。

谢谢,问候。

+0

通常'request.GET'(在视图中)从模板捕获列表中的变量。 – ruddra

+0

是的,我得到那部分。但是,是否应该在表单动作部分传递任何东西,以便我跳转到所需的视图方法? – ravihemnani

+0

这就是你想要放置在表单动作中的url。使用该网址,您可以访问所需的视图 – ruddra

回答

1

这些值将传递回GET请求中的视图。您可以通过访问他们在您的views.table功能:

if request.GET: 
    values = request.GET 
    print values 

请记住,在你的模板选项标签value属性应该是唯一的,这样你可以在GET请求区分这些变量。

+0

由于下拉框显示在views.redis上,我必须将该变量传递给views.table,并在提交特定url时调用views方法。那么,我必须对redis.html表单操作进行任何更改吗? – ravihemnani

+0

将模板中的表单标题更改为'

'假设/ table /是您想要发送获取请求的URL /视图。 – jogarock

+0

谢谢@jogarock。解决它。更改了urls.py和redis.html并获得了期望的结果。 – ravihemnani

相关问题