如何在Django循环中获取HTML表单的输入值

3 投票
1 回答
6967 浏览
提问于 2025-04-18 05:24

我遇到了一种情况。我有一个 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 检测就没有意义了。

撰写回答