gpt4 book ai didi

Python Flask-WTF - 使用相同的表单模板进行添加和编辑操作

转载 作者:太空狗 更新时间:2023-10-29 18:00:58 25 4
gpt4 key购买 nike

我刚刚开始使用 Flask/Flask-WTF/SQLAlchemy,我看到的大多数示例 CRUD 代码都显示了用于添加/编辑的单独模板。拥有两个具有几乎相同的 html 格式的模板(例如 books_add.html、books_edit.html)似乎是重复的。从概念上讲,拥有一个模板对我来说更有意义,例如“books_form.html”,并且只需从两个单独的路由定义中调用同一模板上的 render_template。我不太确定如何完成它,例如:

@app.route('/books/add')
def add_book():
...
render_template('books_form.html', action = 'add')


@app.route('/books/edit/<id>')
def edit_book(id):
...
render_template('books_form.html', action = 'edit', id = id)

但我不确定我是否在正确的轨道上,或者是否偏离了最佳实践。感谢任何输入 - 关于如何处理单个模板文件以处理添加或编辑行为的具体想法。也欢迎提供示例链接。

谢谢!

最佳答案

甚至没有理由使用单独的模板来添加/编辑不同种类的东西。考虑:

{# data.html #}
<!-- ... snip ... -->
{% block form %}
<section>
<h1>{{ action }} {{ data_type }}</h1>
<form action="{{ form_action }}" method="{{ method | d("POST") }}">
{% render_form(form) %}
</form>
</section>
{% endblock form %}

忽略宏 render_form 的工作(在 WTForms 的文档中有一个示例)- 它只需要一个 WTForms 类型的对象并在无序列表中呈现表单。然后你可以这样做:

@app.route("/books/")
def add_book():
form = BookForm()
# ... snip ...
return render_template("data.html", action="Add", data_type="a book", form=form)

@app.route("/books/<int:book_id>")
def edit_book(book_id):
book = lookup_book_by_id(book_id)
form = BookForm(obj=book)
# ... snip ...
return render_template("data.html", data_type=book.title, action="Edit", form=form)

但您不必将自己局限于书籍:

@app.route("/a-resource/")
def add_resource():
# ... snip ...
return render_template("data.html", data_type="a resource" ...)

# ... etc. ...

关于Python Flask-WTF - 使用相同的表单模板进行添加和编辑操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16752963/

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