【问题标题】:Dropdown values are not passed in django下拉值未在 django 中传递
【发布时间】:2015-04-13 18:27:30
【问题描述】:

我试图在 django 中创建一个简单的表单,该表单接受下拉值和来自用户的文本。用户输入的文本值被传递,我可以在控制台中打印它。但即使用户选择了有效选项,下拉值也会显示为空白。谁能帮我解决一下。

views.py

def product(request):
    if request.method == 'POST':
        form = ProductForm(request.POST)

        if form.is_valid():

            print ('selected dropdown value from the form is: ',form.cleaned_data['selection'])
            print('entered text is: ',form.cleaned_data['mytext'])
            #return render_to_response('loggedin.html',{'full_name' : request.user.username,'my_selection' :request.selection})
        else:
            print ('invalid selection')
            return render_to_response('loggedin.html',{'full_name' : request.user.username,'my_selection' : 'invalid'})
    else:
        form = ProductForm()

    args = {}
    args.update(csrf(request))
    args['form'] = ProductForm()
    print args
    return HttpResponseRedirect('/accounts/selected')

forms.py

class ProductForm(forms.Form):
    selection = forms.ChoiceField(required=False)
    mytext = forms.CharField(required=True)

loggedin.html

    {% extends "base.html" %}

{% block content %}

<h2> Hi {{full_name}} you are logged in!!</h2>
<form action="/accounts/product/" method="post">{% csrf_token %}
{{ form.errors }}
{{ form.non_field_errors }}
<label>Select a product:</label>
<select name="selection">
    <option selected="select" disabled>--select one--</option>>
    <option value="{{Iphone}}">Iphone</option>
    <option value="{{Samsung}}">Samsung</option>
    <option value="{{Motorola}}">Motorola</option>
    <option value="{{Blackberry}}">Blackberry</option>
    <option value="{{Nokia}}">Nokia</option>
</select>
<br/>
<label>Text: </label>
<input name="mytext" type="text"><br/>
<input type="submit" value="select">
</form>
<p>Click <a href="/accounts/logout/" here </a> to logout </p>
<p>Your selected product is: {{my_selection}}</p>
{% endblock %}

urls.py

url(r'^accounts/product/$', 'mysite.views.product'),
    url(r'^accounts/selected/$', 'mysite.views.selected'),

【问题讨论】:

标签: python django


【解决方案1】:

为什么将选项的所有值都放在模板变量符号中?您还没有为NokiaBlackberry 等定义任何变量,因此这些值将呈现为空字符串。只需使用普通字符串:

<option value="Nokia">Nokia</option>

【讨论】:

    【解决方案2】:

    变量{{Iphone}}{{Nokia}} 等没有定义(它们应该是调用渲染函数时来自视图上下文的变量)。 您得到的值是一个空字符串,将静态值放在 html 文件中,我建议您阅读更多有关模板以及如何将变量从视图传输到模板的信息。 此外,如果您已经创建了 ProductForm,请使用 ChoiceField 中的 choices 选项。

    祝你好运!

    【讨论】:

      【解决方案3】:

      您可以使用 jQuery 获取下拉列表中选择的值并通过 AJAX 调用传递它。

      <select id="products" name="selection">
         <option selected="select" disabled>--select one--</option>>
         <option value="iphone">Iphone</option>
         <option value="samsung">Samsung</option>
      </select>
      

      您可以使用获取所选值

      var selected = $('#products').val();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多