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
相关产品推荐
相关产品推荐

