繁体   English   中英

如何让我的 HTML 按钮从 SQLite 数据库中删除正确的列表项?

[英]How do I get my HTML button to delete the right list item from a SQLite database?

我是初学者,所以请提前原谅任何愚蠢的行为。 我正在使用 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'))

在此先感谢您的帮助!

只需向每个表单添加一个隐藏输入,其中包含要删除的元素 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>

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 %}

在视图函数中,将变量包含在 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])
    ...

但是,在这个用例中,人们通常会传递电影记录的 id 值而不是名称。 这是来自类似应用程序的最小示例:

模板:

<form method="post" action="{{ url_for('delete_movie', movie_id=movie.id) }}">
    <input class="btn" type="submit" name="delete" value="Delete">
</form>

看法:

@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'))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM