Flask 重定向到动态url
url_for() 函数是动态构建一个网址给特定的功能是非常有用的。该函数接受函数的名称作为第一个参数,并接受一个或多个关键字参数,每个参数对应于URL的变量部分。
以下脚本演示了使用 url_for() 函数。
from flask import Flask, redirect, url_for
app = Flask(__name__)
@app.route('/admin')
def hello_admin():
return 'Hello Admin'
@app.route('/guest/<guest>')
def hello_guest(guest):
return 'Hello %s as Guest' % guest
@app.route('/user/<name>')
def hello_user(name):
if name =='admin':
return redirect(url_for('hello_admin'))
else:
return redirect(url_for('hello_guest',guest = name))
if __name__ == '__main__':
app.run(debug = True)
上面的脚本有一个函数 用户(名称) ,它接受来自URL的参数值。
hello_user() 函数检查参数接收匹配 “admin” 与否。如果匹配,则使用 url_for() 将应用程序重定向到hello_admin() 函数,否则将该接收的参数作为guest参数传递给 hello_guest() 函数。
保存上面的代码并从Python shell运行。
打开浏览器并输入URL - http:// localhost:5000 / user / admin
浏览器中的应用程序响应是 -
Hello Admin
在浏览器中输入以下URL - http:// localhost:5000 / user / mvl
应用程序响应现在变为 -
Hello mvl as Guest
其它:
- 关于url_for函数解析:
url_for('hello_guest',guest = name)
看一下函数的定义:
url_for函数有2个参数,hello_guest代表视图函数的名字,另一个则是**values关键字参数,它的值应该是key = value形式,如果直接传值就会报下面这样的错。
python会把name当作一个位置参数,而不是关键字参数
- **values可选参数的变量名应该与url_for指向的视图函数(hello_guest)中的变量名(guest)保持一致,否则会报运行时错误:werkzeug.routing.BuildError,flask会给出提示你是否忘记了关键字变量名是guest
如果视图函数的名字也写错呢?
报错如下:
werkzeug.routing.BuildError
werkzeug.routing.BuildError: Could not build url for endpoint 'hello_guaaaest' with values ['a']. Did you mean 'hello_guest' instead?
文章出处:http://codingdict.com/article/4868