gpt4 book ai didi

python - 如何将数据(id)放入表单(wtforms)并在提交时取回

转载 作者:太空宇宙 更新时间:2023-11-03 18:25:46 25 4
gpt4 key购买 nike

我是 wtforms 新手,所以我非常感谢任何帮助。

我需要显示书籍名称并在每个地方放置“删除”按钮。我读过wtforms crash course但我不知道如何解决我的问题。

所以我决定用其他方式来做——我最好的想法是渲染一个带有 id 和 name 的字典模板,并在提交时返回 id,但我仍然做不到。代码示例如下。

它是view.py

@application.route('/delete', methods=['GET', 'POST'])
def delete():
books_lib = mydatabase.get_all_books()
form = DeleteForm(request.form)
if request.method == 'POST':
delete_id = form.id.data
mydatabase.del_book(delete_id)
return render_template('delete.html', form = form, books_lib = books_lib)
return render_template('delete.html', form = form, books_lib = books_lib)

这是模板

<!DOCTYPE html>
<html>
<body>
<h2>book to delete</h2>
<form action="/delete" name="delete" method="POST">
{% if books_lib %}
{% for id, book in books_lib.items() %}
<p>{{book}}:<input type="submit" value="Delete" id="{{id}}">
{% endfor%}
{% endif %}
</form>
</body>
</html>

它的形式

class DeleteForm(Form):
book = TextField("Book name", [validators.Length(min=2, max=25)])
id = HiddenField("id")

最佳答案

这是我的做法。

模板

<p><a href="{{ url_for('delete_post', url=post.url) }}">delete</a></p>

查看

# delete a post
@app.route('/<path:url>/d')
@login_required
def delete_post(url):
post = Post.get_post(url)
if post is None:
flash('post not found')
return redirect(url_for('home'))
db.session.delete(post)
db.session.commit()
Topic.update_counts()
flash('Your post has been deleted')
return redirect(url_for('index'))

url_for 是一个 Flask 函数,它生成一个 url 并将其绑定(bind)到一个函数。

太……简而言之。

  1. 模板使用 url_for 函数生成删除路径。
  2. 当您访问该页面时,会调用删除函数。
  3. 模板上闪烁消息,提示删除已完成。

回答你原来的问题......

如果您只是想将 id 列表传递给您的模板......

首先,创建显示函数。

@app.route('/index')
def index():
posts = Post.query.order_by(Post.pub_date.desc()) #SQLAlchemy query.
return render_template('index.html', posts=posts) #sends all posts to template.

现在,您可以在模板中生成 post.ids 列表。

    {% for post in posts %}
{{post.id})
{% endfor %}

要在列表中的每个项目旁边添加删除链接,请使用 url_for。

{% for post in posts %}    
<p>{{post.id}) <a href="{{ url_for('delete_post', id=post.id) }}">delete</a></p>
{% endfor %}

在本例中,我使用帖子 id 而不是 post.url 来标识我要删除的特定帖子,因此不要忘记在删除函数中修改 @app.route。

@app.route('/<int:id>/delete')

请注意,此解决方案不需要表单。如果您想使用复选框进行批量删除,则只需要一个表单。

关于python - 如何将数据(id)放入表单(wtforms)并在提交时取回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23252455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com