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

Flask表单提交时选中记录ID始终返回1,如何从视图传递选中ID到路由

你遇到的问题根源是所有行的pid隐藏输入框都放在了同一个表单内,浏览器提交表单时会上传所有同名的pid参数,而Flask的request.form.get("pid")默认只会取第一个参数值,因此永远返回第一条记录的ID。

以下是两种可行的解决方案:

方案1:每行单独绑定表单(兼容性好)

把原本包裹整个表格的表单删除,改为每行的ID列单独使用一个表单,这样提交时只会携带当前行的ID参数。
修改后的disp.html核心代码如下:

{% extends "layout.html" %}

{% block maindisplay %}
    <table class="table table-striped table-sm">
        <thead>
            <tr>
                <th>Data ID</th>
                <th>Data One</th>
                <th>Data Two</th>
                <th>Data Three</th>
                <th>Data Four</th>
                <th>Data Five</th>
            </tr>
        </thead>
        <tbody>
            {% for data in display_data %}
                <tr>
                    <td>
                        <form action="/display" method="post">
                            <input type="hidden" name="pid" value='{{ data["ID"] }}'>
                            <button type="submit" class="formatButton">{{ data["IDo"] }}</button>
                        </form>
                    </td>
                    <td>{{ data["one"] }}</td>
                    <td>{{ data["two"] }}</td>
                    <td>{{ data["three"] }}</td>
                    <td>{{ data["four"] }}</td>
                    <td>{{ data["five"] }}</td>
                </tr>
            {% endfor %}
        </tbody>
    </table>
{% endblock %}

方案2:直接使用按钮传值(代码更简洁)

无需拆分表单,直接将ID值绑定到对应按钮的value属性上,只有被点击的按钮值会被表单提交,不需要额外的隐藏输入框。
修改后的disp.html核心代码如下:

{% extends "layout.html" %}

{% block maindisplay %}
    <form action="/display" method="post">
        <table class="table table-striped table-sm">
            <thead>
                <tr>
                    <th>Data ID</th>
                    <th>Data One</th>
                    <th>Data Two</th>
                    <th>Data Three</th>
                    <th>Data Four</th>
                    <th>Data Five</th>
                </tr>
            </thead>
            <tbody>
                {% for data in display_data %}
                    <tr>
                        <td><button type="submit" name="pid" value='{{ data["ID"] }}' class="formatButton">{{ data["IDo"] }}</button></td>
                        <td>{{ data["one"] }}</td>
                        <td>{{ data["two"] }}</td>
                        <td>{{ data["three"] }}</td>
                        <td>{{ data["four"] }}</td>
                        <td>{{ data["five"] }}</td>
                    </tr>
                {% endfor %}
            </tbody>
        </table>
    </form>
{% endblock %}

两种方案都无需修改后端Flask路由代码,调整模板后就能正常获取选中记录的ID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:24:04