我正在使用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>
Run Code Online (Sandbox Code Playgroud)
如您所见,每个条目旁边都有一个删除链接.我应该如何在数据库中引用正确的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'))
Run Code Online (Sandbox Code Playgroud)
到目前为止我的工作但不是我想要的.提前致谢!
Sebastien delete_entry函数正在删除db中的最后一个条目
where id=(select max(id)from entries)
你需要做的是在url中插入一个参数来删除,比如'/ delete /:id',其中id是你要删除的条目的id,然后更改模板以生成url,如下所示:
<a href="{{ url_for('delete_entry', entry.id) }}">Delete</a>
Run Code Online (Sandbox Code Playgroud)
并且还更改删除条目的db查询:
g.db.execute('delete from entries where id=' + id)
Run Code Online (Sandbox Code Playgroud)
EDIT1:
我检查了Flask文档,为了将变量放入您的路由,您必须修改路由,如下所示:
@app.route('/delete/<int:entry_id>')
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以获得python函数中的entry_id:
def delete_entry(entry_id):
g.db.execute('delete from entries where id=' + entry_id)
Run Code Online (Sandbox Code Playgroud)
最后,您必须在url_for函数中指定您的条目ID:
<a href="{{ url_for('delete_entry', entry_id = entry.id) }}">Delete</a>
Run Code Online (Sandbox Code Playgroud)