1. 最基本路由關系
路由是URL地址與處理邏輯(視圖函數)的對應關系。
本質:將用戶請求的URL路徑映射到具體的處理程序(如Django視圖函數)。
示例:
# urls.py
urlpatterns = [ path('home/', views.home_view), # URL路徑"home/" → home_view函數
]
當用戶訪問http://域名/home/時,自動觸發home_view函數處理請求。
2. 動態路由(含正則)
動態路由通過URL參數傳遞數據,支持正則表達式靈活匹配路徑
參數捕獲:
# 捕獲數字參數
path('user/<int:user_id>/', views.user_detail),
# 正則匹配(復雜場景)
re_path(r'users(\w+)/', views.users)
re_path(r'^articles/(?P<year>[0-9]{4})/$', views.article_year),
訪問/user/123/時,user_id=123傳遞給視圖函數。
正則表達式作用:
約束參數格式(如限定4位年份)
精細化路徑匹配規則
3. 路由分發到不同App
大型項目需拆分路由到多個App,通過include實現模塊化管理
操作步驟:
(1)主路由配置?(項目層)
# 主urls.py
urlpatterns = [ path('blog/', include('blog.urls')), # 子路由:blog App path('shop/', include('shop.urls')), # 子路由:shop App
]
(2)子路由配置?(App層)
# blog/urls.py
urlpatterns = [ path('list/', views.blog_list),
]
①訪問/blog/list/時,由blogApp的blog_list視圖處理
②核心優勢
- 解耦項目結構
- 便于團隊協作維護
4. Name與Namespace
解決多App路由命名沖突問題,支持反向解析URL
(1)Name(名稱)
為路由定義唯一別名,反向生成URL:
# 定義
path('about/', views.about, name='about_page'), # 一般會有以下兩處會用到
# 1.模板中反向生成url (.html文件中)
<a href="{% url 'about_page' %}">關于我們</a>
# 2.在視圖函數中生成URL
from django.urls import reverseurl = reverse("about_page")
(2)Namespace(命名空間)
區分不同App的同名路由:
from django.urls import path, re_path, include# 主路由urlpatterns = [path('api/', include("apps.api.urls",namespace='a1')),path('web/', include("apps.web.urls",namespace='w1')),]
from django.urls import path, re_pathfrom . import views# 子路由:api/urls.pyurlpatterns = [path('login/', views.login,name="login"),path('auth/', views.auth, name='auth'),]
from django.urls import path, re_pathfrom . import views# 子路由:web/urls.pyurlpatterns = [path('home/', views.home,name='home'),path('order/', views.order,name='order'),path('auth/', views.order, name='auth'),]
# 在某個URL或者視圖中反向生成:
from django.urls import reverse
url = reverse("a1:login")
url = reverse("w1:home") url = reverse("a1:auth")
url = reverse("w1:auth")
- 避免多個App中article_detail名稱沖突
- namespace需要設置app_name:
# 主路由
urlpatterns = [path('api/', include("apps.api.urls", namespace='a1')),]
from django.urls import path, re_pathfrom apps.api import views# 子路由:api/urls.pyurlpatterns = [path('login/', views.login, name="login"),path('auth/', views.auth, name='auth'),]app_name = "api"
5.總結對比
概念 | 作用 | 典型場景 |
基本路由關系 | URL → 視圖映射 | 簡單頁面跳轉 |
動態路由(正則) | 參數傳遞與格式約束 | 用戶詳情頁、分類過濾 |
路由分發(include) | 模塊化管理多App路由 | 大型項目分層開發 |
Name與Namespace | 反向解析URL + 避免命名沖突 | 多App協作、模板鏈接生成 |
路由系統通過路徑匹配與參數處理,實現Web請求的精準分發與管理