找回密碼
 註冊
搜索
查看: 239|回復: 0

[教學] Flask中的 url_for() 陷阱

[複製鏈接]
發表於 2025-6-23 23:08:06 | 顯示全部樓層 |閱讀模式
Push to Facebook
概述
在Flask開發中總是會遇到一些陷阱,下面是自己踩到的關於url_for()的陷阱,是在使用flask的單元測試時遇到的。


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

url_for操作物件是函數,而不是route裡的路徑。

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

  1. from flask import Flask, url_for
  2. app = Flask(\__name__)

  3. @app.route('/')
  4. def index():
  5.     pass

  6. @app.route('/login')
  7. def LOGIN():
  8.     pass

  9. with app.test_request_context():
  10.     print(url_for('index'))
  11.     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 appforfor
. 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:\Ppack​​z5”slibc_type, Fpyline, 3:\Poc​​y活動, n一周
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\werkzeugugd 30, 326"
, values, method, self)
werkzeug.routing.BuildError: Could not build url for endpoint 'login'. Did you mean 'index' instead?


把login修改為LOGIN:

  1. with app.test_request_context():
  2.     print(url_for('index'))
  3.     print(url_for('LOGIN'))
複製代碼

列印正常:

  1. /
  2. /login
複製代碼


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

  1. 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方法

參考資料:http://dormousehole.readthedocs.io/en/latest/api.html#flask.url_for
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

Archiver|手機版|小黑屋|TShopping

GMT+8, 2025-7-1 14:54 , Processed in 0.025467 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回復 返回頂部 返回列表