有没有办法使用 Flask (jinja2) 通过用户输入从 HTML table 中删除一行?

Is there a way to delete a row from an HTML table with user input using Flask (jinja2)?

我是 Flask 和编程新手。我正在使用 Flask/SQLite 创建一个简单的数据库。我让用户在表单中输入数据,并将该数据填充到表单旁边的 HTML table 中。我已经设法实现了这一点。但是,我想添加用户删除 table 中的行的功能。

我在我的 routes.py 中创建了一个我想使用的函数,但我找不到将用户提交的信息传回我的 routes.py 函数的方法。我试过使用 HTML link,但我不想将用户传递给另一个 URL 并返回。有办法实现吗?

来自routes.py

@app.route("/")
@app.route('/interventions', methods=['GET', 'POST'])
@login_required
def interventions():
.....  

    qinter = Interventions.query.all()

    def delete_entry(entry):

        db.session.delete(qinter[(entry-1)])
        db.session.commit()
        return redirect(url_for('interventions'))
 .....

来自Interventions.html

.........

    <table border="1">
        <tr>
            <th>Delete?</th>
            <th>Date</th>
            <th>Chart #</th>
            <th>Provider</th>
            <th>Pharmacist</th>
            <th>COI</th>
            <th>Accepted?</th>
            <th>Intervention</th>
        </tr          
        {% for q in qinter %}
            <tr>
                <td><<a href="{{ delete_entry(q) }}">delete</a></td>
                <td>{{  q.date  }}</td>
                <td>{{  q.chart  }}</td>
                <td>{{  q.prescriber  }}</td>
                <td>{{  q.pharmacist  }}</td>
                <td>{{  q.category  }}</td>
                <td>{{  q.accepted  }}</td>
                <td>{{  q.intervention  }}</td>
            </tr>
         {% endfor %}
    </table>

您需要的是某种方式从您的 HTML 模板向您的干预路线传达您想要删除数据库中的特定行 table。为此,您需要向路由函数添加一些额外的参数,如下所示:

@app.route('/interventions', methods=['GET', 'POST'])
@app.route('/interventions/<action>/<item_id>', methods=['GET', 'POST'])
@login_required
def interventions(action=None, item_id=None):

    def delete_entry(entry):

        db.session.delete(entry)
        db.session.commit()


    if request.method == "POST":

        if action == 'delete':

            # Get specific row user wants to delete
            qinter_row_to_delete = Interventions.query.get(item_id)

            # Delete row
            delete_entry(qinter_row_to_delete)

            return redirect(url_for('interventions'))


    elif request.method == "GET":

        qinter = Interventions.query.all()

        # Render template etc...

然后从 Jinja 模板调用该端点以删除行:

<form id="form" action="{{url_for('interventions', action='delete', item_id=q.id)}}" method="POST">