0

我正在尝试使用 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'))
4

1 回答 1

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)
于 2013-09-17T08:30:36.140 回答