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

Django循环嵌套form标签导致Chrome中主form提前闭合问题求助

问题原因

HTML 规范明确禁止 <form> 元素嵌套,浏览器遇到嵌套的 form 标签时会触发自动容错机制,提前闭合上层未闭合的 form 标签,这就是你看到主 form 在第一次循环后自动闭合的核心原因。

你当前的代码逻辑是把多个子 <form> 写在了主 <form> 内部,违反了嵌套规则,Chrome 解析到第一个循环里的 <form> 标签时,会自动把外层的主 form 先闭合,再渲染这个内部 form,后续的循环内容和提交按钮就都不在主 form 范围内了。


解决方案

如果你要实现单个按钮提交多组表单数据,完全不需要嵌套 form,调整逻辑如下:

  • 直接去掉循环里的 <form> 和对应的 </form> 标签,所有表单字段都会渲染在主 form 内部,提交时会统一提交到主 form 的 action 地址
  • 注意给每组表单的字段加上区分前缀,避免不同组的同名字段覆盖,你可以在 Django 生成 form 实例的时候给每个 form 指定前缀参数,比如 Form(prefix=f'hour_{hour}'),这样提交后后台可以按前缀区分不同组的表单数据

修正后的代码示例:

{% load crispy_forms_tags %}
<form method="POST" action="{% url 'App:Submit' %}">
    {% csrf_token %}
    {% for form in forms %}
    <h3>Hour {{ form.Hour }}: </h3>
    {% csrf_token %}
    {{ form|crispy }}
    <br>
    {% endfor %}
    <br>
    <div class="col text-center">
        <button class="btn btn-primary" type="submit">Send</button>
    </div>
</form>

内容的提问来源于stack exchange,提问作者Alberto Vona

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:06:01