关于python:如何使用Flask,FlaskWTF将表单错误路由到另一个视图

How to route form errors to another view using Flask, FlaskWTF

我正在尝试使用flask创建两个视图。第一个视图show_entries显示表中的条目列表。它还包括一个创建新条目的表单。

表单被提交给第二个视图new_entry,该视图接受post方法,并负责使用sqlacalchemy将新条目添加到表中。new_entry然后重定向回show_entries

我的问题是form.errors没有路由到show_entries,所以用户永远不会看到它们。我不确定解决这个问题的最佳方法,或者如果我的观点和我的观点一致的话。

以下是我目前拥有的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def show_entries():
    entryForm = EntryForm()
    entries = g.user.entries
    return render_template('show_entries.html',
                           entries=entries,
                           entryForm=entryForm)

def new_entry():
    form = EntryForm()
    if form.validate_on_submit():
        newEntry = Entry(g.user, form.time.data)
        db_session.add(newEntry)
        db_session.commit()
        flash('New entry was succesfully posted')
    return redirect(url_for('show_entries'))

通常的模式是以新的条目作为表单,以列表页的形式显示条目。当您对新的条目执行GET请求时,您将获得表单,然后将其发布以添加条目。这样,如果有错误,您可以将其显示在表单旁边-所有数据都可用。如果按现有方式拆分视图,则需要某种方式将错误数据(和表单数据)从新的"条目"视图移动到"显示条目"视图。

更像(未测试的):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def show_entries():
    entries = g.user.entries
    return render_template('show_entries.html',
                           entries=entries)

def new_entry():
    form = EntryForm()
    if form.validate_on_submit():
        newEntry = Entry(g.user, form.time.data)
        db_session.add(newEntry)
        db_session.commit()
        flash('New entry was successfully posted')
        return redirect(url_for('show_entries'))
    return render_template('show_new_entry_form.html',
                           entryForm=form)