有没有办法使用 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">
我是 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">