如何在Django循环中获取HTML表单的输入值
我遇到了一种情况。我有一个 Django 模板,叫做 ip_form.html,内容如下。
<form method = "GET">
{% for val in value_list %}
<input type='text' value = '{{ val }}'> {{ val }}</input>
{% endfor %}
</form>
我想告诉你的是,我的 value_list 里面的值数量是未知的(可能是零)。所以我可能不能使用 Django 的 form.py(而且我是在某个特定的视图函数中获取这些值的,也就是说,我不知道它是否每次都会出现)。
假设在 views.py 里是这样的:
def view1(request):
value_list = [1,2,3,4,5] # it will change every time view1 will get request
if request.method == "GET":
# i want to retrieve here post
return render ('ip_form.html','value_list':value_list)
那么我该如何使用 form.py 呢?
我该如何获取这些值呢?你可以参考一下 POST 方法。(这不是敏感数据,所以用 GET 方法也没问题)
谢谢。
1 个回答
5
你需要给你的输入框加一个 name
属性,这样你就可以用这个名字来获取一系列的值,使用 Django 的 QueryDict getlist
方法:
HTML:
<form method="POST">
{% for val in value_list %}
<input type='text' value='{{ val }}' name='my_list'>{{ val }}</input>
{% endfor %}
</form>
视图:
def view1(request):
value_list = [1,2,3,4,5] # it will change every time view1 will get request
if request.method == "POST":
values_from_user = request.POST.getlist('my_list')
return render ('ip_form.html', 'value_list': value_list)
values_from_user
将会是你表单中输入的值的一个列表(如果表单没有任何 input
元素,那就是一个空列表)。
请注意,我把你的表单方法改成了 POST
,因为如果不这样的话,你在视图中的 request.method
检测就没有意义了。