如何从视图中返回选定的 ID,它总是将 id 1 返回到 Flask 路由
Posted
技术标签:
【中文标题】如何从视图中返回选定的 ID,它总是将 id 1 返回到 Flask 路由【英文标题】:How can I return the selected ID from the view it always returns id 1 to Flask route 【发布时间】:2021-12-17 10:44:15 【问题描述】:我有一个表,它是 Sqlite3 搜索的结果,它显示在视图 disp.html 中。它显示数据库中每条记录的记录 ID 和元数据。当我从表中选择记录 ID 时,它应该显示所选记录 ID 的详细数据。但是发生的情况是,无论选择什么记录 ID,我总是将第一个 ID 返回到路由。
如何让视图将所选 ID 返回到路由?
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><input type="hidden" name="pid" value=' data["ID"] '><button btn 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 %
视图的输出
ID Data One Data Two Data Three Data Four Data Five
1 One1 Two1 Three1 Four1 Five1
2 One2 Two2 Three2 Four2 Five2
3 One3 Two3 Three3 Four3 Five3
路线
@app.route("/display", methods=["GET", "POST"])
def list_data():
if request.method == "POST":
dataZero=request.form.get("pid")
...
return render_template("pdisplay.html", dataZero=dataZero)
【问题讨论】:
【参考方案1】:所有的 元素都有相同的 name 属性;只有一个值与表单一起提交,假设是第一个。
一种解决方案是将<input> elements 的类型属性设置为“提交”而不是“隐藏”。不需要按钮。
另一种解决方案是给每个<button> element 一个名称(“pid”)和一个值;单击按钮的值与表单一起提交。不需要隐藏的 元素。
在任何一种情况下,所有元素都可以共享相同的 name 属性,因为表单操作是在“点击”时触发的,并且提交的值将来自被“点击”的元素。
【讨论】:
感谢您的回复。 - 你能详细说明“给每个元素一个名字”吗?您是否为每个按钮建议一个唯一的名称?我不知道数据库中最终会有多少条目,所以我不确定如何为每个条目提供唯一的名称。 - 虽然将输入类型从隐藏更改为提交作品,但它会在我试图避免的 ID 周围放置一个框。我会试试这个方法,看看 CSS 是如何消除边框的。 我增加了答案的清晰度(希望 :)。所有按钮元素都可以具有相同的“名称”,因为只要单击按钮,就会使用单击按钮的值提交表单。输入类型=“提交”也是如此。在任何一种情况下,元素都可以共享一个名称属性,因为点击时会触发表单操作。 谢谢,我使用了按钮解决方案,它工作得很好,没有边框。再次感谢。以上是关于如何从视图中返回选定的 ID,它总是将 id 1 返回到 Flask 路由的主要内容,如果未能解决你的问题,请参考以下文章
我在自定义表格视图中有 FB 朋友的图像和名称。如何获取 FB ID 中的选定行并将请求发送给多个朋友?