Flask: dynamically populated form from databse content
基本上我想做一些非常简单的事情:我想创建一个表单来删除数据库中的条目。
模板正在创建一个包含所有条目的html表,没有任何问题。 我现在的问题是:如何将其转换为每行都有链接的表单。
当然,我可以通过链接手动编写HTML代码。 但是,还有一种更"冒险"的方式吗? 我已经在使用wtforms和sqlalchemy了
我的路线:
1 2 3 4 5 6 7 8 | @app.route('/admin', methods=['GET', 'POST']) @htpasswd.required def admin(user): orders = Order.query.all() return render_template( 'admin.html', title="AdminPanel", orders=orders ) |
该模型:
1 2 3 | class Order(db.Model): id = db.Column(db.Integer, primary_key=True) email = db.Column(db.String(120), index=True, unique=True) |
模板:
1 2 3 4 5 6 | {% for order in orders %} <tr> <td>{{order.email}}</td> <td><i class="fa fa-trash" aria-hidden="true"></td> </tr> {% endfor %} |
您应该使用不同的路径进行删除,而不是使用相同的路径来渲染模板。 此外,您不需要删除任务的表单。 你可以使用get参数和你尝试过的链接
将此添加到您的路线:
1 2 3 4 5 6 7 8 9 10 | 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')) |
基本上,您将执行删除,然后使用上面的代码重定向回管理路由
您的模板文件应更改为:
1 2 3 4 5 6 | {% for order in orders %} <tr> <td>{{order.email}}</td> <td><i class="fa fa-trash" aria-hidden="true"></td> </tr> {% endfor %} |