URL 設計(URLconf)
URLconf(URL configuration)是 Django 把「使用者請求的網址」對應到「該由哪段程式碼(View)處理」的機制,通常寫在各個 App 的 urls.py 裡,是請求進入 Django 後的第一站。
官方文件:URL dispatcher。
基本寫法
每個 App 會有自己的 urls.py,用 urlpatterns 這個 list 定義一組網址規則,path() 的第一個參數是網址樣式,第二個參數是對應的 View:
# myapp/urls.py
from django.urls import path
from . import views
urlpatterns = [
path("current_datetime/", views.current_datetime),
]
App 的 urls.py 還要被 Project 層級的 urls.py 用 include() 掛進來,Django 才找得到:
# mysite/urls.py
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path("admin/", admin.site.urls),
path("myapp/", include("myapp.urls")),
]
這樣設計的好處是每個 App 的網址規則可以獨立維護,也方便把同一個 App 掛到不同的網址前綴下重複使用。
帶參數的網址
網址中常需要夾帶變數(例如文章的 id),可以用路徑轉換器(path converter)擷取,並當成參數傳給 View:
urlpatterns = [
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),
]
常用的轉換器包含 str(預設,不含斜線的字串)、int(正整數)、slug(英數字、連字號、底線)、uuid。取出的值會依名稱對應到 View 函式的參數。
命名網址(name)
替每條規則加上 name,之後在 Template 或程式碼中就能用名稱反查網址,而不用寫死路徑字串;日後調整網址結構時,只需要改 urls.py,不用改所有引用的地方:
下一步
網址對應好之後,接著看實際處理請求的 Views。