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