2012-07-20 503 views
5

我应该使用下一个建筑吗?如何从下拉框django中获取值?

def PageObjects(request): 
    q = bla_bla_bla(bla_bla) 
    answer = request.POST['value'] 


<form action="PageObjects" method="get"> 
     <select > 
     <option selected="selected" disabled>Objects on page:</option> 
     <option value="10">10</option> 
     <option value="20">20</option> 
     <option value="30">30</option> 
     <option value="40">40</option> 
     <option value="50">50</option> 
     </select> 
     <input type="submit" value="Select"> 
    </form> 

我该如何解决这个问题?我需要写什么?

回答

2

我会建议用邮寄您的数据:

<form action="PageObjects" method="post"> 
    <select > 
    <option selected="selected" disabled>Objects on page:</option> 
    <option value="10">10</option> 
    <option value="20">20</option> 
    <option value="30">30</option> 
    <option value="40">40</option> 
    <option value="50">50</option> 
    </select> 
    <input type="submit" value="Select"> 
</form> 

你应该访问你的表格值通过cleaned_data字典:

def page_objects(request): 
    if request.method == 'POST': 
    form = YourForm(request.POST) 

    if form.is_valid(): 
     answer = form.cleaned_data['value'] 

我真的建议您阅读Django文档:

https://docs.djangoproject.com/en/1.4/topics/forms/#using-a-form-in-a-view

+0

我回答了用户Paritosh Singh关于我的问题。我如何修复它,如果我会使用你的建议? – 2012-07-23 18:30:15

+0

@MaxL在决定是使用POST还是GET时,你应该遵循良好的HTTP实践。这里有一篇关于如何决定哪种方法适合你的场景的好文章http://stackoverflow.com/questions/46585/when-do-you-use-post-and-when-do-you-use-get。但我绝对不认为这里有足够的信息来说明一个。 – 2015-04-07 03:56:58

+1

@AustinA感谢您的建议,但我在2年前提出了这个问题:) 现在我有更多经验:) – 2015-04-08 06:15:47

6

提供一个名称标签,像

<select name="dropdown"> 
    <option selected="selected" disabled>Objects on page:</option> 
      <option value="10">10</option> 
      <option value="20">20</option> 
      <option value="30">30</option> 
      <option value="40">40</option> 
      <option value="50">50</option> 
    </select> 

访问它,鉴于像

def PageObjects(request): 
    q = bla_bla_bla(bla_bla) 
    answer = request.GET['dropdown'] 
+0

我可以使用GET方法吗?请解释我如何将保存箱中的值发送到我的view.py? – 2012-07-20 20:26:25

+0

它取决于你使用的表单方法,如果你正在使用

你可以使用GET else使用POST。如果您希望它访问任何(无论是GET还是POST),请使用REQUEST。 – 2012-07-20 20:29:28

+0

你的情况,你应该使用GET,看到答案 – 2012-07-20 20:32:03

0

使 'your_app_folder'

在forms.py

的内部文件forms.py:

class FilterForm(forms.Form): 
    FILTER_CHOICES = (
     ('time', 'Time'), 
     ('timesince', 'Time Since'), 
     ('timeuntil', 'Time Untill'), 
    ) 

    filter_by = forms.ChoiceField(choices = FILTER_CHOICES) 

in views.py

from .forms import FilterForm 

def name_of_the_page(request): 
form = FilterForm(request.POST or None) 
answer = '' 
if form.is_valid(): 
    answer = form.cleaned_data.get('filter_by') 
    // notice `filter_by` matches the name of the variable we designated 
    // in forms.py 

这种形式会生成以下HTML:

<tr><th><label for="id_filter_by">Filter by:</label></th><td><select id="id_filter_by" name="filter_by" required> 
<option value="time" selected="selected">Time</option> 
<option value="timesince">Time Since</option> 
<option value="timeuntil">Time Untill</option> 
</select></td></tr> 

注意带属性的选项字段中选择,当您提交表单,在你的views.py文件,你会抓住从selected属性数据与线

answer = form.cleaned_data.get('filter_by')