【问题标题】:How can I return the selected ID from the view it always returns id 1 to Flask route如何从视图中返回选定的 ID,它总是将 id 1 返回到 Flask 路由
【发布时间】: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)

【问题讨论】:

    标签: python sqlite flask jinja2


    【解决方案1】:

    所有的 元素都有相同的 name 属性;只有一个值与表单一起提交,假设是第一个。

    一种解决方案是将<input> elements 的类型属性设置为“提交”而不是“隐藏”。不需要按钮。

    另一种解决方案是给每个<button> element 一个名称(“pid”)和一个值;单击按钮的值与表单一起提交。不需要隐藏的 元素。

    在任何一种情况下,所有元素都可以共享相同的 name 属性,因为表单操作是在“点击”时触发的,并且提交的值将来自被“点击”的元素。

    【讨论】:

    • 感谢您的回复。 - 你能详细说明“给每个元素一个名字”吗?您是否为每个按钮建议一个唯一的名称?我不知道数据库中最终会有多少条目,所以我不确定如何为每个条目提供唯一的名称。 - 虽然将输入类型从隐藏更改为提交作品,但它会在我试图避免的 ID 周围放置一个框。我会试试这个方法,看看 CSS 是如何消除边框的。
    • 我增加了答案的清晰度(希望 :)。所有按钮元素都可以具有相同的“名称”,因为只要单击按钮,就会使用单击按钮的值提交表单。输入类型=“提交”也是如此。在任何一种情况下,元素都可以共享一个名称属性,因为点击时会触发表单操作。
    • 谢谢,我使用了按钮解决方案,它工作得很好,没有边框。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    • 2021-01-15
    • 1970-01-01
    • 2021-11-24
    相关资源
    最近更新 更多