Bar*_*ett 9 html python forms jinja2 flask
我是初学者,所以请提前原谅任何愚蠢.我正在使用Flask(以及扩展名为Jinja2)来创建一个简单的Web应用程序 - 基本上可以让您将电影键入Web表单,然后将其添加到SQLite数据库中.我已经让Flask很好地遍历数据库中的所有电影并在加载时将它们打印到页面.
我想在每部电影旁边加一个"删除"按钮.让按钮出现很简单.但我不确定如何将按钮绑定到函数delete_movie(),以便它将删除与按下的按钮关联的正确电影.
由于每个影片旁边都有一个按钮,因此我必须动态命名表单元素.但如果它是动态命名的,我如何将正确的值传递回函数?这是我到目前为止所得到的:
#movies.html
<div class=page>
<h1>Movie List</h1>
<ul class=movies>
{% for movie in movies %}
<li><h1>{{ movie.title }}</h1>
<form action="{{ url_for('delete_movie') }}" method=post class=delete-movie><input type=submit value=Delete name=movie_to_delete"></form>
{% endfor %}
</ul>
</div>
#app.py
@app.route('/delete', methods=['POST'])
def delete_movie():
g.db.execute('delete from movies where movie = ?', [request.form['movie_to_delete']])
g.db.commit()
return redirect(url_for('list_movies'))
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助!
Tom*_*gli 11
只需为每个表单添加一个隐藏的输入,并将要删除的元素id/name作为值:)
例如.
<form action="{{ url_for('delete_movie') }}" method=post class=delete-movie>
<input type=hidden value="{{ movie.name }}"name=movie_to_delete />
<input type=submit />
</form>
Run Code Online (Sandbox Code Playgroud)
IMO,上面答案中的方法是完全没有必要的。您应该将电影的名称作为 URL 变量传递:
{% for movie in movies %}
<li><h1>{{ movie.title }}</h1>
<form action="{{ url_for('delete_movie', movie_name=movie.name) }}" method=post>
<input type=submit value=Delete">
</form>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
在视图函数中,在 URL 规则中包含变量(即/delete/<movie_name>),然后您可以获取电影名称作为参数:
@app.route('/delete/<movie_name>', methods=['POST'])
def delete_movie(movie_name):
g.db.execute('delete from movies where movie = ?', [movie_name])
...
Run Code Online (Sandbox Code Playgroud)
然而,在这个用例中,人们通常传递电影记录的 id 值而不是名称。这是类似应用程序的一个最小示例:
模板:
<form method="post" action="{{ url_for('delete_movie', movie_id=movie.id) }}">
<input class="btn" type="submit" name="delete" value="Delete">
</form>
Run Code Online (Sandbox Code Playgroud)
看法:
@app.route('/movie/delete/<int:movie_id>', methods=['POST'])
@login_required
def delete_movie(movie_id):
movie = Movie.query.get_or_404(movie_id)
db.session.delete(movie)
db.session.commit()
flash('Item deleted.')
return redirect(url_for('index'))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6412 次 |
| 最近记录: |