加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-16 23:40:23 所属栏目:Python 来源:网络整理
导读:我刚刚开始使用Flask / Flask-WTF / SQLAlchemy,而我看到的大多数CRUD代码显示了添加/编辑的单独模板.使用几乎相同的html格式的两个模板(例如books_add.html,books_edit.html)似乎是重复的.在概念上,我有一个模板,比如“books_form.html”,并且只需从两个单
我刚刚开始使用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. ...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读