我正在努力在基于flask的博客上实现删除功能。我在这里搜索了相关的帖子并尝试将这些评论结合在一起,但仍然无法正常工作..似乎如果我运行代码,则条目ID不会通过url。它给了我'找不到页面'的错误。很高兴得到帮助,为什么会发生这种情况!
这是我的py:
@app.route('/delete_entry/<entry_id>', methods=['POST'])
def delete_entry():
if not session.get('logged_in'):
abort(401)
db = get_db()
db.execute('delete from entries where id=' + entry_id)
db.commit()
flash('Entry deleted')
return redirect(url_for('show_entries'))
这是我的show_entries py:
{% extends "layout.html" %}
{% block body %}
{% if session.logged_in %}
<form action="{{ url_for('add_entry') }}" method=post class=add-entry>
<dl>
<dt>Title:
<dd><input type=text size=30 name=title>
<dt>Text:
<dd><textarea name=text rows=5 cols=40></textarea>
<dd><input type=submit value=Share>
</dl>
</form>
{% endif %}
<ul class=entries>
{% for entry in entries %}
<li><h2>{{ entry.title }}</h2><h6>{{ entry.dt }}<h6><p>{{ entry.text|safe }}</p><p><{{ entry.id }}</p></li>
<form action="{{ url_for('delete_entry', entry_id = entry.id) }}" method=post class=delete-entry>
<input type="hidden" name="entry_id" value="{{ entry.id }}">
<input type="submit" value="Delete" />
</form>
{% else %}
<li><em>Unbelievable. No entries here so far</em></li>
{% endfor %}
</ul>
{% endblock %}
这是delete_entry.html:
{% extends "layout.html" %}
{% block body %}
<ul class=entries>
{% for entry in entries %}
<li><a>{{entry.title }}</a>
<pre>{{ entry.text }}</pre>
{% if session.logged_in %}
<form action="{{ url_for('delete_entry') }}" method=post class=delete-entry>
<input type=hidden value="{{ entry.id }}"name=movie_to_delete"></input>
<input type=submit></input>
</form>
{% endif %}
{% endfor %}
</ul>
{% endblock %}
答案 0 :(得分:1)
好吧,也许这是在您的代码中,但是如果不是 - 当您使用url_for()时,您需要在代表该路由的代码中有一个函数。为了澄清,你不能只有一个名为show_entries的html模板,你需要一个呈现该模板的函数read about it here
@app.route('/show_entries')
def show_entries():
return render_template('show_entries.html')
另外,我认为您需要在函数中添加一个GET方法,以允许用户访问html表单,在那里他们选择要删除的条目ID,如下所示:
@app.route('/delete_entry/<entry_id>', methods=['GET', 'POST'])
def delete_entry():
if not session.get('logged_in'):
abort(401)
if request.method == 'POST' and form.validate_on_submit():
db = get_db()
db.execute('delete from entries where id=' + entry_id)
db.commit()
flash('Entry deleted')
return redirect(url_for('show_entries'))
else #request.method == 'GET':
return render_template('delete_entry.html')