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