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

循环表单隐藏输入值传递异常:提交后值恒为1的原因与解决

问题描述

简化代码如下:

HTML模板代码

{% for c in categories %}
  <form action="" method="post">
  {{ form.hidden_tag() }}
  <input type="hidden" name="e" value='{{ c.id }}'>
  {{ form.submit() }}
{% endfor %}

Flask路由代码(routes.py)

categories = Category.query.all()
form = AddAttributeForm()

if form.validate_on_submit():
    d = request.form.get('e')
    print(d)

现有3个分类,渲染后的HTML中每个循环生成的表单隐藏字段值是正确的:

<input type="hidden" name="e" value="1">
<input type="hidden" name="e" value="2">
<input type="hidden" name="e" value="3">

但提交任意表单时,e(即代码中的d)始终返回值1。

疑问

(1) 出现该问题的原因是什么?
(2) 如何解决以传递正确的c.id值?


问题解答

(1) 问题原因

循环中只打开了<form>标签却未闭合,导致所有表单控件被包含在第一个表单内。浏览器解析HTML时会自动补全未闭合标签,后续的<form>标签被忽略,点击任意提交按钮时实际提交的都是第一个表单,因此只会获取到第一个表单的e值(即1)。

(2) 解决方法

在循环内部为每个表单添加闭合标签,确保每个提交按钮归属独立的表单:

修改后的HTML模板代码:

{% for c in categories %}
  <form action="" method="post">
    {{ form.hidden_tag() }}
    <input type="hidden" name="e" value='{{ c.id }}'>
    {{ form.submit() }}
  </form> <!-- 新增表单闭合标签 -->
{% endfor %}

调整后每个表单相互独立,点击对应按钮时会提交所属表单,即可获取正确的c.id值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 19:11:00