跳轉至

建立 2026-09-17 更新 2026-09-17

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.pyinclude() 掛進來,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,不用改所有引用的地方:

path("accounts/login/", views.login_view, name="login"),
<a href='{% url "login" %}'>登入</a>

下一步

網址對應好之後,接著看實際處理請求的 Views