如何将URL中的参数传递给Flask中的其他函数

时间:2017-06-19 21:07:09

标签: python flask pymysql

基本上我希望能够输入网址,例如http://example.com/“某事”,如果没有任何内容呈现index.html。由于某种原因,这是行不通的。 另一方面,我希望能够传递该参数,例如http://example.com/host123并在下面的结果函数中使用它。理想情况下,最后我只需输入URL example.com/host123并直接转到该页面即可。

@app.route('/<host>',methods= ['POST', 'GET'])
     15 def index(host):    
     16         if host is None:
     17                 return render_template("index.html")
     18         else:
     19                 return result(host)
     20         print("test")   
     21 @app.route('/<host>',methods= ['POST', 'GET'])
     22 def result(host):
#some code....

1 个答案:

答案 0 :(得分:1)

从你的问题看,如果没有定义主机,你似乎试图(#1)渲染index.html模板,否则渲染一个不同的模板。但是,从您的代码来看,如果定义了主机,您似乎可能希望(#2)重定向到另一个端点。

如果你正在尝试#1,那你就非常接近了。不要将结果函数作为路径,渲染并从该函数返回所需的模板,然后从视图中返回它。像这样:

@app.route('/',methods= ['POST', 'GET'])
@app.route('/<host>',methods= ['POST', 'GET'])
def index(host=None):    

    if host is None:
        return render_template('index.html')
    else:
        return result(host)

def result(host):
    ...
    return render_template('other_template.html')

我还展示了如何明确地路由&#34;主机什么都不是&#34;带有第二个装饰器的案例(docs here)。

如果您正在尝试实施#2,请查看Flask.redirect函数并重定向到所需的端点/网址。请记住,您的代码当前显示两个视图函数响应同一个变量url路径。您应该使用唯一的网址,以便您的应用可以正确解析它们(您可以找到有关此here的更多信息。请尝试以下操作:

@app.route('/',methods= ['POST', 'GET'])
@app.route('/<host>',methods= ['POST', 'GET'])
def index(host):    

    if host is None:
        return render_template('index.html')
    else:
        return redirect(url_for('result', host=host))

@app.route('/result/<host>',methods= ['POST', 'GET'])       
def result(host):
    ...
    return render_template('other_template.html')

代码段没有经过测试,但应该让您入门。祝你好运。