flask之url_for函数
一:url_for函數
干什么的?傳入函數名,得到函數的路由地址(訪問視圖函數的地址)
from flask import Flask
from flask import url_for
app = Flask(__name__)
@app.route("/")
def index():
login_url = url_for("login")
print(login_url)
return "主頁"
@app.route("/login")
def login():
return "登錄"
if __name__ == '__main__':
app.run(debug=True)
例如:瀏覽器輸入:127.0.0.1:5000/ 顯示主頁 控制臺輸出 /login , 可以用它來完成跳轉鏈接的功能:對上面的函數進行修改,加入html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<a href="{{ a }}">登錄</a>
</body>
</html>
from flask import Flask
from flask import render_template
from flask import url_for
app = Flask(__name__)
@app.route("/")
def index():
login_url = url_for("login")
return render_template("url_for_test.html",a=login_url)
@app.route("/login")
def login():
return "歡迎進入登錄頁面"
if __name__ == '__main__':
app.run(debug=True)
點擊登錄后跳轉到下面界面
注意:
login_url = url_for("login",_external = True) 這樣會顯示完整的url地址
http://127.0.0.1:5000/login
還可以傳遞參數,對路徑進行拼接
login_url = url_for("login", a=1, _external = True)
http://127.0.0.1:5000/login?a=1 自動將位置參數,拼接成查詢字符串
login_url = url_for("login", name="haha", _external = True)
假如點擊index界面的登錄,不跳轉到登錄界面,而是顯示一張靜態的圖片
@app.route("/")
def index():
login_url = url_for("static",filename="pic.jpg",_external=True)
print(login_url)
return render_template("url_for_test.html",a=login_url)
點擊登錄后,瀏覽器跳轉后,顯示了圖片, 控制臺輸出:http://127.0.0.1:5000/static/pic.jpg 這種情況瀏覽器沒有將 filenme="pic.jpg" 拼接成
http://127.0.0.1:5000/static?pic.jpg 而是 拼接成http://127.0.0.1:5000/static/pic.jpg
原因是:嘗試將參數 filename="pic.jpg" 改為 a="pic.jpg"
報錯:werkzeug.routing.BuildError: Could not build url for endpoint 'static' with values ['a']. Did you forget to specify values ['filename']?
說明:框架會自動分辨,要是以文件進行賦值,必須使用 filename="文件"
三:產生的意義
在模板中的a標簽手動輸入鏈接地址,進行點擊跳轉,這個很簡答,很容易辦到。
假如,視圖函數app.route("地址") 地址發生了,改變,那么要鏈接到這個視圖函數,就需要對前端的每個鏈接進行修改,這顯然不方便。
但是,通過url_for直接能反向獲取視圖函數的鏈接地址,這樣就能省去,動態改變造成的麻煩。
總結
以上是生活随笔為你收集整理的flask之url_for函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 马斯克解释特斯拉 HW4 软件适配慢半年
- 下一篇: 教你怎么使用打印机(api)