在Flask開發中總會遇到一些坑,下面是本身踩到的關於url_for()的坑shell
url_for()函數是用於構建指定函數的URL。
url_for操做對象是函數,而不是route裏的路徑。flask
若是route和函數名不同而致使使用url_for()錯誤,千萬不要去route找錯誤。
例以下面的代碼:app
from flask import Flask, url_for app = Flask(\__name__) @app.route('/') def index(): pass @app.route('/login') def LOGIN(): pass with app.test_request_context(): print(url_for('index')) print(url_for('login'))
print(url_for('index'))
沒有報錯,就是一個反斜槓;print(url_for('login'))
報錯,拋出BuildError異常:函數
/ Traceback (most recent call last): File 「<\pyshell#12>」, line 3, in print(url_for(‘login’)) File 「C:\Python35\lib\site-packages\flask\helpers.py」, line 332, in url_for return appctx.app.handle_url_build_error(error, endpoint, values) File 「C:\Python35\lib\site-packages\flask\app.py」, line 1811, in handle_url_build_error reraise(exc_type, exc_value, tb) File 「C:\Python35\lib\site-packages\flask_compat.py」, line 33, in reraise raise value File 「C:\Python35\lib\site-packages\flask\helpers.py」, line 322, in url_for force_external=external) File 「C:\Python35\lib\site-packages\werkzeug\routing.py」, line 1758, in build raise BuildError(endpoint, values, method, self) werkzeug.routing.BuildError: Could not build url for endpoint ‘login’. Did you mean ‘index’ instead?
把login修改成LOGIN:ui
with app.test_request_context(): print(url_for('index')) print(url_for('LOGIN'))
打印正常:url
/ /login
url_for()
也能夠附帶一些參數,好比想要完整的URL,能夠設置_external
爲Ture:spa
url_for('.static',_external=True,filename='pic/test.png')
這樣返回的url是http://localhost/static/pic/test.png.net
True
,則生成一個絕對路徑URL轉自:https://blog.csdn.net/yannanxiu/article/details/52287870code