url_for
與 django 的reverse('app_name:name') 類似,都是用來反轉路由的
url_for
的基本使用:
url_for
: url_for的一個參數是一個視圖函數的名字的字符串格式,后面的參數的參數以關鍵字的形式傳遞給url
。 如果傳遞的參數在那個視圖中url中定義了,那么這個參數就會以路徑參數的形式給url
。 如果傳遞的參數沒有在url
中定義,那么這些參數將會以查詢字符串的形式放到url
中。
from flask import Flask, url_for
app = Flask(__name__)
@app.route('/')
def index():
my_list_path = url_for('my_list', page=1, count=111)
print(my_list_path) # 結果為: /list/1/?count=111
return my_list_path
@app.route('/list/<int:page>/')
def my_list(page):
return '第 {} 頁'.format(page)
為什么需要 url_for
:
- 將來如果修改了
URL
, 但沒有修改該URL對應的函數名,就不用到處支替換URL了. url_for
會自動的處理那些特殊的字符,不需要手動處理
@app.route('')
def index():
a = url_for('login', next='/')
print(a) # /login/?next=%2F # 會自動編碼,不需要手動處理了
return a
@app.route('/login/')
def login():
return 'login'
使用url_for
在模板中加載靜態文件
加載靜態文件使用的是url_for
函數。第一個參數需要為'static'
, 第二個參數需要為一個關鍵字參數filename='靜態文件路徑'
。 如下所示:
<link rel="stylesheet" href="{{ url_for('static', filename='css/index.css') }}">
路徑查找,要心當前項目的sttic
目錄作為根目錄