如何在表单提交后调用不同的呈现

时间:2015-04-01 21:38:59

标签: python flask

我第一次潜入Flask,我在找点工作时遇到了麻烦。

我目前有一个模板,当我的标签values为空时,它包含一个表单,提交时应该使用表单的参数调用特定的函数并返回另一个模板。每次调用表单都应该使用不同的值调用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>

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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