Flask:从数据库内容动态填充表单

Flask:从数据库内容动态填充表单,flask,flask-sqlalchemy,flask-wtforms,Flask,Flask Sqlalchemy,Flask Wtforms,基本上,我想做一些非常简单的事情:我想创建一个表单来删除数据库中的条目 模板正在创建一个包含所有条目的html表,没有任何问题。我现在的问题是:如何将其转换为每行都有链接的表单 当然,我可以手动编写带有链接的html代码。但是有没有更“flaskish”的方式呢?我已经在使用wtforms和sqlalchemy了 我的路线: @app.route('/admin', methods=['GET', 'POST']) @htpasswd.required def admin(user):

基本上,我想做一些非常简单的事情:我想创建一个表单来删除数据库中的条目

模板正在创建一个包含所有条目的html表,没有任何问题。我现在的问题是:如何将其转换为每行都有链接的表单

当然,我可以手动编写带有链接的html代码。但是有没有更“flaskish”的方式呢?我已经在使用wtforms和sqlalchemy了

我的路线:

@app.route('/admin', methods=['GET', 'POST'])
@htpasswd.required
def admin(user):
    orders = Order.query.all()

    return render_template(
        'admin.html', title="AdminPanel", orders=orders
    )
模型:

class Order(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(120), index=True, unique=True)
模板:

{% for order in orders %}
            <tr>
                <td>{{order.email}}</td> 
                <td><a href="{{ url_for('admin',order_id=order.id, action='delete') }}"><i class="fa fa-trash" aria-hidden="true"></i></a></td>
            </tr>
 {% endfor %}
{%用于订单%}
{{order.email}
{%endfor%}

您应该使用不同的删除路径,而不是用于呈现模板的相同路径。此外,删除任务不需要表单。您可以像您尝试过的那样使用get参数和链接

将此添加到您的路线:

from flask import redirect, url_for
from app import db # you should import your db or db session instance so you can commit the deletion change this line to wherever your db or db session instance is


@app.route('/delete/<order_id>', methods=['GET', 'POST'])
@htpasswd.required
def delete(order_id):
    orders = Order.query.filter(Order.id == order_id).delete()
    db.commit()
    return redirect(url_for('admin'))
来自flask导入重定向,url\u用于
从app import db#您应该导入您的db或db会话实例,以便您可以将此行的删除更改提交到您的db或db会话实例所在的任何位置
@app.route('/delete/',methods=['GET','POST'])
@htpasswd.required
def删除(订单id):
orders=Order.query.filter(Order.id==Order\u id).delete()
db.commit()
返回重定向(url_表示('admin'))
基本上,您将执行删除,然后使用上述代码重定向回管理路由

您的模板文件应更改为:

{% for order in orders %}
            <tr>
                <td>{{order.email}}</td> 
                <td><a href="{{ url_for('delete',order_id=order.id) }}"><i class="fa fa-trash" aria-hidden="true"></i></a></td>
            </tr>
 {% endfor %}
{%用于订单%}
{{order.email}
{%endfor%}

这是我在网站上采用的方法,我相信这是最容易维护的方法