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

时间:2013-09-17 01:47:54

标签: python forms sqlalchemy flask flask-wtforms

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

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

我的问题是form.errors没有路由到show_entries,因此用户永远不会看到它们。我不确定最好的方法,或者我是否按照我划分观点的方式走上了正确的道路。

以下是我目前的情况:

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'))

1 个答案:

答案 0 :(得分:1)

正常模式是将/ show_entries作为列表页面,其中new_entry作为表单。当您对new_entry执行GET请求时,您将获得该表单,然后POST到它以添加该条目。这样,如果出现错误,您可以在表单旁边显示它 - 所有数据都可用。如果您按原样拆分视图,则需要某种方法将错误数据(和表单数据)从new_entry视图移动到show_entries视图。

更像(未经测试)的东西:

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)