通过表单将表数据发送到 Flask 方法

Rya*_*yan 4 python forms http-post flask

我想知道为什么这没有按计划进行。下表是一个表格。每个表行都有一个book idbook title。其book title格式为按钮,以便我可以在表单提交时使用 post 方法。单击该按钮时,该方法(如下所示)会很好地触发,但图书 ID 不会传递给该方法。我需要book id传递给底层方法,因为它将在 SQL 查询中使用。我有办法实现这一点吗?

{% block body %}
<div class="align-center">
    <form action="{{ url_for('books') }}" method="post">
        <table class="table">
            <thead>
                <tr>
                    <th></th>
                    <th>Book ID</th>
                    <th>ISBN #</th>
                    <th>Title</th>
                    <th>Author</th>
                </tr>
            </thead>
            <tfoot>
                <tr>
                    <td colspan="6"></td>
                </tr>
            </tfoot>
            {% for book in books %}
            <tr>
                <td></td>
                <td name="bookid">{{ book.id }}</td>
                <td name="bookisbn">{{ book.isbn }}</td>
                <td name="booktitle"><button btn style="border:none; border-bottom: 1px solid black;">{{ book.title }}</button></td>
                <td name="bookauthor">{{ book.author }}</td>
            </tr>
            {% endfor %}
        </table>
    </form>
</div>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

这是我要发布的 Flask 方法:

@app.route("/books", methods=["POST"])
@login_required
def books():
    bookid = request.form.get("bookid")
    return render_template("books.html", message=bookid)
Run Code Online (Sandbox Code Playgroud)

Iva*_*hko 6

您只能使用元素从 HTML 表单提交值<input>。因此,您需要将<td name="...">元素转换为<input>s 或在每个元素附近添加隐藏输入<td>

...
<td name="bookid">{{ book.id }}</td>
<input type="hidden" name="bookid" value="{{ book.id }}" />
<td name="bookisbn">{{ book.isbn }}</td>
<input type="hidden" name="bookisbn" value="{{ book.isbn }}" />
...
Run Code Online (Sandbox Code Playgroud)