django中不传递下拉值

时间:2015-04-13 18:27:31

标签: python django

我试图在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'),

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

祝你好运!

答案 2 :(得分:0)

您可以使用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();