如何从视图中返回选定的 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 路由的主要内容,如果未能解决你的问题,请参考以下文章

从选定的列表视图项中获取 id

我在自定义表格视图中有 FB 朋友的图像和名称。如何获取 FB ID 中的选定行并将请求发送给多个朋友?

如何获取列表视图选定行的小部件ID

如何将 TableView 中的选定行(JSON)发送到另一个视图控制器?

如何将tabpanel的键从视图传递到控制器asp mvc

jsTree:如何将选定节点的 ID 获取到 jsTree 中的根节点?