如何在提交表单后调用不同的渲染器

How to call a different render after a form submission

我是第一次接触 Flask,但遇到了一些问题。

我目前有一个模板,当我的选项卡 values 为空时,它包含一个表单,提交时应该使用表单的参数调用特定函数和 return 另一个模板。表单的每次调用实际上都应该调用具有不同值的 index.html 模板。

相关部分代码如下:

main.py

@app.route('/', methods=['POST','GET'])
def main():

    global maxDepth, numberOfRelated

    if not values:
        return render_template('initial.html')

    if request.method=='POST':
        url = request.form['url']
        maxDepth = request.form['depth']
        numberOfRelated = request.form['numberOfRelated']

        values = crawling(url,maxDepth,numberOfRelated)

        return render_template('index.html',var=values)

initial.htmlindex.html的形式部分其实是一样的

<form class="form-inline" action="/" method="POST">
              <div class="form-group">
                <input  name='url' type="text" class="form-control"/>
              </div>             
               <div class="form-group minorForm">
                <input  name='numberOfRelated' type="text" class="form-control" />
              </div>
              <div class="form-group minorForm">
                  <input  name='depth' type="text" class="form-control" />
              </div>
              <div class="form-group navbar-right">
                <button class="btn btn-success minorForm generate" type="submit"> Generate</button>
              </div> 
   </form>

在您的 main 方法中,除非值是全局的,否则不会为 if not values 定义。

关于您的问题,在表单已提交的条件之后添加另一个 render_template 调用:

if request.method=='POST':
    url = request.form['url']
    maxDepth = request.form['depth']
    numberOfRelated = request.form['numberOfRelated']
    values = crawling(url,maxDepth,numberOfRelated)
    return render_template('index.html',var=values) # 1
return render_template('index.html',var=values) # 2

如果提交表单,条件将为真,模板将在评论 #1 处呈现。如果用户正常导航到页面,则条件将为 false 并调用带有注释 #2 的行。

我对这个问题有点困惑,但你应该总是在 POST 之后重定向(除非表单中有错误并且没有采取任何行动)。这样,如果用户重新加载页面,则不会重复相同的操作。