Ответ 1
Нет абсолютно никаких причин иметь отдельные шаблоны для добавления и редактирования различных вещей. Рассмотрим:
{# 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. ...