Flask,jinja2:是否可以使用render_template()呈现页面的一部分,而不影响页面的其余部分

Flask,jinja2:是否可以使用render_template()呈现页面的一部分,而不影响页面的其余部分,flask,jinja2,flask-wtforms,Flask,Jinja2,Flask Wtforms,我有一个主页,其中包括一些不同的形式,其中之一是编辑个人资料的形式。我正在使用wtfforms处理表单,并且有一个名为edit_profile.html的子模板,它可以呈现原始表单和edit_profile view函数返回的任何错误。我想做的是: 如果返回错误:在不干扰页面其余部分的情况下呈现子模板edit_profile.html 目前有一个主页查看功能: @app.route('/', methods=['GET','POST']) def home(): cur = g.db.exe

我有一个主页,其中包括一些不同的形式,其中之一是编辑个人资料的形式。我正在使用wtfforms处理表单,并且有一个名为edit_profile.html的子模板,它可以呈现原始表单和edit_profile view函数返回的任何错误。我想做的是:

如果返回错误:在不干扰页面其余部分的情况下呈现子模板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来实现这一点。

如果在处理表单数据时遇到任何错误,请使用POST数据重定向到
主页
端点(使用代码307)

现在在
home
端点中,我们需要处理可能从
edit\u 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)

通过这种方式,主视图功能将能够访问表单数据,验证表单数据并显示错误。

非常感谢vivekagr,它似乎工作得非常好
@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)