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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM