Python Flask-WTF - use same form template for add and edit operations
我刚刚开始使用Flask / Flask-WTF / SQLAlchemy,我看到的大多数示例CRUD代码都显示了用于添加/编辑的单独模板。 拥有两个几乎相同的html形式的模板似乎是重复的(例如books_add.html,books_edit.html)。 从概念上讲,拥有一个模板(例如"books_form.html")对我来说更有意义,只需从两个单独的路径定义中调用同一模板上的render_template。 我不太确定如何实现它,例如:
1 2 3 4 5 6 7 8 9 10 | @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) |
但我不确定我是否走上了正确的轨道,或者偏离了最佳实践。 任何输入都很受欢迎 - 关于如何处理单个模板文件以处理添加或编辑行为的具体想法。 也欢迎链接到示例。
谢谢!
绝对没有理由使用单独的模板来添加/编辑不同类型的东西。 考虑:
1 2 3 4 5 6 7 8 9 10 | {# data.html #} <!-- ... snip ... --> {% block form %} <section> {{ action }} {{ data_type }} <form action="{{ form_action }}" method="{{ method | d("POST") }}"> {% render_form(form) %} </form> </section> {% endblock form %} |
忽略宏
1 2 3 4 5 6 7 8 9 10 11 12 | @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) |
但是你不需要仅限于书籍:
1 2 3 4 5 6 | @app.route("/a-resource/") def add_resource(): # ... snip ... return render_template("data.html", data_type="a resource" ...) # ... etc. ... |