You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django模板中获取for循环生成的所有表单POST提交值

问题根因

你当前只能拿到最后一组值的原因有两点:

  1. HTML表单提交规则中,多个相同name属性的输入项提交时,后面的值会覆盖前面的值,你循环生成的所有数字输入框、隐藏域都用了完全相同的name,所以POST请求里只会保留最后一组数据。
  2. 页面中所有输入框的id都重复,不符合HTML规范,也会导致label点击选中输入框的联动功能失效。

解决方法

第一步:修改模板代码

给循环生成的输入项的name属性后缀加上[],让浏览器把同name的所有值按顺序组装成数组提交,同时把id改为动态值避免重复:

<div>
    <form action="change_number_of_days" method="post">
        {% csrf_token %}
             {% for name in filenames %}
                     <input type="number" name="number_of_days[]" id="number_of_days_{{ forloop.counter }}" value=200>
                     <label for="number_of_days_{{ forloop.counter }}"> {{ name }} </label>
                     <input type="hidden" value="{{ name }}" name="name_of_file[]"><br><br>
             {% endfor %}
         <button type="submit"> Gem </button>
     </form>
</div>

第二步:修改视图代码

使用Django提供的getlist()方法获取同name的所有值,再按顺序配对文件名和对应的天数即可:

def change_number_of_days(request):
    if request.method == 'POST':
        # 按模板循环顺序获取所有天数、文件名列表
        days_list = request.POST.getlist('number_of_days[]')
        filename_list = request.POST.getlist('name_of_file[]')
        
        # 遍历配对处理每一组数据
        for filename, days in zip(filename_list, days_list):
            # 此处替换为你自己的业务逻辑
            print(f"文件名:{filename},对应天数:{days}")

        return render(request, 'price_calculation_complete.html')

    return HttpResponse("error")

内容的提问来源于stack exchange,提问作者Matthias Hyldegaard Djernæs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 08:06:03