我有一个主页,其中包含一些不同的表单,其中一个是编辑个人资料表单。我正在使用wtfforms处理表单,并有一个名为edit_profile.html的子模板,它会呈现原始表单和edit_profile视图函数返回的任何错误。我想要做的是:
如果返回错误:在不干扰页面其余部分的情况下呈现子模板edit_profile.html。
目前有一个主页查看功能:
@app.route('/', methods=['GET','POST'])
def home():
cur = g.db.execute(some_select_statement)
data = cur.fetchall()
some_var = some_function(data)
ep_form = EditProfile()
return render_template('home.html', some_var=some_var, ep_form=ep_form)
然后是一个处理配置文件编辑的函数:
@app.route('/edit_profile', methods=['GET', 'POST'])
def edit_profile():
ep_form = EditProfile()
if ep_form.validate_on_submit():
# In here is the code that handles the new profile data
return render_template('edit_html', ep_form=ep_form)
在返回错误的那一刻,返回大部分页面,除了绘制'some_var'以进行渲染。我知道我可以使用Ajax来渲染WTF错误值并保持页面的其余部分不变,但我想知道是否有办法只使用Flask和Jinja。
答案 0 :(得分:0)
如果在处理表单数据时遇到任何错误,请使用POST数据重定向到home
端点(使用代码307)。
@app.route('/edit_profile', methods=['GET', 'POST'])
def edit_profile():
ep_form = EditProfile()
if ep_form.validate_on_submit():
# If the data is validated and good
# In here is the code that handles the new profile data
return render_template('edit_html', ep_form=ep_form)
else:
# If any errors are encountered, redirect
# back to the home endpoint along with POST data
# using code 307
return redirect(url_for('home'), code=307)
现在在home
端点,我们需要处理可能从edit_profile
重定向的POST数据。
@app.route('/', methods=['GET','POST'])
def home():
# fetch data from DB, other values
ep_form = EditProfile()
# We need to call validate_on_submit so that
# the data is validated and errors are populated
if request.method == "POST":
ep_form.validate_on_submit()
return render_template('home.html', some_var=some_var, ep_form=ep_form)
通过这种方式,主视图功能可以访问表单数据,验证表单数据并显示错误。