我正在使用Flask的教程应用程序学习Python,我无法想象如何引用数据库中的某一行。我试图通过使用模板中的删除链接来删除记录。我花了一整天时间尝试我能找到的所有内容并真正理解这一点。我知道这很简单,但我不明白!
这是html模板:
<ul class=entries>
{% for entry in entries %}
<li><h2>{{ entry.title }}
<h2>{{ entry.text|safe }}</h2>
{% if session.logged_in %}
<a href="{{ url_for('delete_entry') }}">Delete</a>
{% endif %}
{% else %}
{% endfor %}
</ul>
正如您所看到的,每个条目旁边都有一个删除链接。我应该如何引用它 数据库中的正确ID?
这是我到目前为止的Python函数:
@app.route('/delete')
def delete_entry():
if not session.get('logged_in'):
abort(401)
g.db.execute('delete from entries where id=(select max(id)from entries)')
g.db.commit()
flash('The entry was deleted')
return redirect(url_for('show_entries'))
到目前为止,我的工作有效,但这不是我想要的。提前致谢!
答案 0 :(得分:5)
sebastien delete_entry函数正在删除db
中的最后一个条目 where id=(select max(id)from entries)
您需要做的是在网址中插入一个参数,例如'/ delete /:id',其中id是您要删除的条目的ID,然后更改模板以生成网址:< / p>
<a href="{{ url_for('delete_entry', entry.id) }}">Delete</a>
并且还更改删除条目的数据库查询:
g.db.execute('delete from entries where id=' + id)
EDIT1:
我检查了Flask文档,为了将变量放入您的路线,您必须按如下方式修改路线:
@app.route('/delete/<int:entry_id>')
通过这种方式,您可以获得python函数中的entry_id:
def delete_entry(entry_id):
g.db.execute('delete from entries where id=' + entry_id)
最后,您必须在url_for函数中指定您的条目ID:
<a href="{{ url_for('delete_entry', entry_id = entry.id) }}">Delete</a>