如何在django views.py中获取选定选项的文本值

时间:2019-03-20 18:56:12

标签: python django

例如:如果选择了第一个选项“常规”,那么如何在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">

2 个答案:

答案 0 :(得分:0)

1应该在键request.POST下的drop1中。

这应该有助于您在视图中查看选定的值:

print(request.POST['drop1'])

<option>标记的文本内容不会提交到您的视图,只会提交value属性内的文本。这是HTML和Web浏览器设计; Python或Django无法控制POST请求中发送的内容。


如果您确实需要在POST请求中同时获取两个字符串(1Regular),那么我过去使用的一种解决方法是复制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表单,则所有基础处理都已为您完成,您可以跳过这部分代码。