【Flask】Flask中關於url_for()


概述

在Flask開發中總會遇到一些坑,下面是自己踩到的關於url_for()的坑

url_for()函數是用於構建指定函數的URL。

url_for操作對象是函數,而不是route里的路徑。

如果route和函數名不一樣而導致使用url_for()錯誤,千萬不要去route找錯誤。 
例如下面的代碼:

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:

with app.test_request_context():
    print(url_for('index'))
    print(url_for('LOGIN'))

打印正常:

/ 
/login

參數

url_for()也可以附帶一些參數,比如想要完整的URL,可以設置_external為Ture:

url_for('.static',_external=True,filename='pic/test.png')

這樣返回的url是http://localhost/static/pic/test.png

    • endpoint 
      URL的端點(即函數的名字)
    • values 
      URL的變量參數
    • _external 
      如果設置為True,則生成一個絕對路徑URL
    • _scheme 
      一個字符串指定所需的URL方案。_external參數必須設置為True,不然會拋出ValueError。
    • _anchor 
      如果設置了這個則給URL添加一個mao
    • _method 
      如果設置這個則顯示地調用這個HTTP方法

轉自:https://blog.csdn.net/yannanxiu/article/details/52287870


免責聲明!

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



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