基本上我希望能够输入网址,例如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....
答案 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')
代码段没有经过测试,但应该让您入门。祝你好运。