urlpatterns
變量的語法
urlpatterns
應該是path()
和/或re_path()
實例的Python列表。
- 首先,Django會使用根路由解析模塊(root URLconf)來解析路由。 通常,這是
ROOT_URLCONF
設置的值,但是如果傳入的HttpRequest
對象具有urlconf
屬性(由中間件設置)那么ROOT_URLCONF
的設置將被其替換。 - Django加載該Python模塊並查找變量
urlpatterns
。 它應該是django.urls.path()
或者django.urls.re_path()
實例的Python列表。
path 是新的方法,re_path方法和原來的url用法一致,使用正則表達式
代碼:
from django.urls import path
from . import views
urlpatterns = [
path('articles/2003/', views.special_case_2003),
path('articles/<int:year>/', views.year_archive),
path('articles/<int:year>/<int:month>/', views.month_archive),
path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),
]
變化:
不在使用url函數,轉而使用path轉換器
直接在url中表示捕獲的參數類型,
提取的參數會進行類型轉換,不像正則表達式中都是捕獲字符串
不以斜杠結尾則匹配不到
- 要從URL捕獲某個值,使用尖角括號。
- 捕獲的值可以選擇包含一個轉換器類型。 例如, 使用
<int:name>
來捕獲一個整形參數。 如果沒有包含轉換器, 那么除了/
字符外, 會匹配任意字符串。
- 對
/articles/2005/03/
的請求將與列表中的第三個條目匹配。 Django會調用函數views.month_archive(request, year=2005, month=3)
。
/articles/2003
不會匹配到任何一個模式,因為每個模式都要求URL以斜杠結尾。
轉換器類型以下路徑轉換器默認可用:
str
- 匹配除了路徑分隔符'/'
的任意非空字符串。 如果表達式中沒有包含轉換器,那么這將是默認行為。int
- 匹配0或任意正整數。 並作為 int 返回。slug
- 匹配任意的黏接字符串(slug string),這些黏接字符串是ASCII的字母或數字,詞與詞之間由連字符或下划線黏接組成。 例如,building-your-1st-django-site
。uuid
- 匹配一個格式化的 UUID. 為了防止多個URL映射到同一頁面,必須包含多個破折號(dash),同時字母必須小寫。 例如,075194d3-6885-417e-a8a8-6c931e272f00
. 返回一個UUID
實例。path
- 匹配包含路徑分隔符'/'
在內的任意非空字符串。 相對於str
,這允許你匹配一個完整的URL路徑,而不僅僅是URL路徑的一部分。