例如:如果选择了第一个选项“常规”,那么如何在views.py中获取值“ 1”及其文本值“常规”
<form method = "post" action = "{% url 'index' %}">
{% csrf_token %}
<select name = "drop1" >
<option value="1">Regular</option>
<option value="2">Medium</option>
<option value="3">Large</option>
</select>
<input type = "submit" value="Submit">
答案 0 :(得分:0)
值1
应该在键request.POST
下的drop1
中。
这应该有助于您在视图中查看选定的值:
print(request.POST['drop1'])
<option>
标记的文本内容不会提交到您的视图,只会提交value
属性内的文本。这是HTML和Web浏览器设计; Python或Django无法控制POST请求中发送的内容。
如果您确实需要在POST请求中同时获取两个字符串(1
和Regular
),那么我过去使用的一种解决方法是复制HTML标记中的文本
<option value"1-Regular">Regular</option>
以便发送值1-Regular
;然后我在视图中拆分了字符串
v1, v2 = request.POST['drop1'].split('-')
print(v1)
print(v2)
这不是一个完美的解决方案,但确实为我工作。
答案 1 :(得分:0)
我可以想到的另一种解决方案(也无需使用Django表单)是使用Python dict
(或list
)在视图中保留所有选项:
import collections
DROP1_DICT = collections.OrderedDict(
(1, 'Regular'),
(2, 'Medium'),
)
def my_view(request):
...
if request.method == 'POST':
selected_value = request.POST['drop1']
selected_label = DROP1_DICT[selected_value]
print(selected_value)
print(selected_label)
else:
ctx = {
'drop1_dict': DROP1_DICT,
}
return render(request, 'my_template.html', ctx)
并基于此渲染模板:
<form method = "post" action = "{% url 'index' %}">
{% csrf_token %}
<select name = "drop1" >
{% for k, v in drop1_dict.items %}
<option value="{{ k }}">{{ v }}</option>
{% endfor %}
</select>
<input type="submit" value="Submit">
</form>
当然,如果您仅使用django表单,则所有基础处理都已为您完成,您可以跳过这部分代码。