我试图在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'),
答案 0 :(得分:0)
为什么要将选项的所有值都放在模板变量符号中?您还没有为Nokia
,Blackberry
等定义任何变量,因此这些值将呈现为空字符串。只需使用普通字符串:
<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();