我是Flask和编程的新手。我正在使用Flask / SQLite创建一个简单的数据库。我正在让用户以表单形式输入数据,并将该数据填充在表单旁边的HTML表格中。我已经做到了。但是,我想增加用户删除表中行的功能。
我已经在我的routes.py中创建了一个我想利用的函数,但是我找不到将用户提交的信息传递回我的route.py函数的方法。我尝试使用HTML链接,但不想将用户传递到另一个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>
答案 0 :(得分:0)
您需要的是一种从HTML模板到干预路径进行通信的方法,该方法要删除数据库表中的特定行。为此,您需要向路由功能添加一些其他参数,例如:
@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">