【问题标题】:How to get the value from the drop down box django?如何从下拉框django中获取值?
【发布时间】:2012-07-20 19:46:33
【问题描述】:

我应该使用下一个构造吗?

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>

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

【问题讨论】:

    标签: django drop-down-menu


    【解决方案1】:

    给标签起个名字,比如

    <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'] 
    

    【讨论】:

    • 我可以使用 GET 方法吗?解释一下它将如何将值从 Dropbox 发送到我的 view.py?
    • 这取决于您使用的表单方法,如果您使用的是
      您可以使用 GET 否则使用 POST。如果您希望它访问任何(无论是 GET 还是 POST),请使用 REQUEST。
    • 在你的情况下,你应该使用 GET,查看答案的变化
    • 您面临什么问题。意味着你得到 ?dropdown= in url...
    • 它正在执行“PageObjects”操作并将我的 URL 更改为 .../list/PageObject 并显示 404 错误,因为该 URL 未写入我的 urls.py
    【解决方案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

    【讨论】:

    • 我向用户 Paritosh Singh 回答了我的问题。如果我会使用您的建议,我该如何解决?
    • @MaxL 在决定是使用POST 还是GET 时,您确实应该遵循良好的http 实践。这是一篇关于如何确定哪种方法适合您的场景的好文章stackoverflow.com/questions/46585/…。但我绝对不认为这里有足够的信息可以说一个而不是另一个。
    • @AustinA 感谢您的建议,但我在 2 年前问过这个问题 :) 现在我有了更多经验 :)
    • 如果表单中有多个下拉列表,我们可以为每个选择标签声明 id,我们如何使用 'id' 属性访问视图中特定下拉列表的值?
    【解决方案3】:

    在“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)
    

    在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')
    

    【讨论】:

      猜你喜欢
      • 2013-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      相关资源
      最近更新 更多