一、urlpatterns有什麼用
urlpatterns是一個列表,用於將url與視圖函數或類相關聯。在Django中,我們編寫的所有視圖函數/類都需要通過urlpatterns來進行路由分發。
urlpatterns通常被定義在項目的urls.py文件中。例如:
from django.urls import path
from . import views
urlpatterns = [
path('index/', views.index, name='index'),
path('login/', views.login, name='login'),
]
在這個示例中,我們將’/index/’和’/login/’這兩個URL路徑與index()和login()視圖函數相關聯。當用戶訪問’/index/’時,Django會調用index()視圖函數。
二、urlpatterns的值怎麼設置
我們可以將urlpatterns看作一個列表,列表中的每一個元素都代表一個URL與視圖函數/類的映射關係。
在Django中,我們通常使用path()函數或re_path()函數來設置urlpatterns的值。path()函數用於通用的URL匹配,而re_path()函數則可以使用正則表達式進行更加靈活的匹配。
具體使用如下:
from django.urls import path, re_path
from . import views
urlpatterns = [
path('index/', views.index, name='index'),
path('articles//', views.article_year),
re_path(r'^articles/(\d{4})/(0?[1-9]|1[012])/$', views.article_month),
]
在這個示例中,我們使用path()函數將’/index/’路徑與index()視圖函數相關聯,同時使用了一個具有參數的視圖函數(article_year())。
另外,我們還使用了re_path()函數來匹配形如’/articles/2019/05/’這樣的路徑,並與具有參數的視圖函數(article_month())相關聯。
三、urlpattern怎麼匹配好
在Django中,URL匹配是按照順序進行的。當用戶發起請求時,Django系統按照urlpatterns中定義的順序逐一檢查每一個URLpattern,直到匹配到一個合適的URLpattern為止。
例如:
from django.urls import path
from . import views
urlpatterns = [
path('login/', views.login, name='login'),
path('login/forgot/', views.forgot, name='forgot'),
path('login/register/', views.register, name='register'),
]
在這個示例中,如果用戶訪問’/login/forgot/’路徑,Django會去匹配urlpatterns中的第一個pattern,即’login/’。由於’login/’並不匹配,Django會繼續匹配第二個pattern:’/login/forgot/’。此時成功匹配。
注意,urlpatterns中的值匹配時是按照從上到下的順序進行的。因此,如果定義下面的urlpatterns:
from django.urls import path
from . import views
urlpatterns = [
path('users/', views.users, name='users'),
path('users/new/', views.new_user, name='new_user'),
path('users//', views.user_detail, name='user_detail'),
path('users//edit/', views.edit_user, name='edit_user'),
]
如果用戶訪問’users/3/edit/’,Django將會先匹配’users/’和’users/new/’。這兩個pattern都不匹配,然後再匹配’users/<int:user_id>/’這個pattern。即使’users/<int:user_id>/’後面也定義了一個匹配’users/<int:user_id>/edit/’,也不會被執行。
四、patterns選取
下面是三個與url-pattern相關的patterns:
1、將URLpattern分離到單獨的模塊中
# urls.py
from django.urls import include, path
from . import views
urlpatterns = [
path('', views.index),
path('accounts/', include('django.contrib.auth.urls')),
path('blog/', include('blog.urls')),
# ...
]
在這個示例中,我們將賬戶應用的URLpattern放到了/accounts/路徑中,並將’blog/’的URLpattern放到了blog應用中。這可以使urls.py文件更加整潔,也可以方便地管理多個不同的URLpattern。此外,使用include()函數還可以允許其他應用中的URLpattern在你的應用中被重複使用。
2、使用正則表達式進行URL匹配
# urls.py
from django.urls import re_path
from . import views
urlpatterns = [
re_path(r'^search/(?P<query>\w+)/(?P<page>\d+)/$', views.search_results),
]
在這個示例中,我們使用了re_path()函數並使用正則表達式進行URL匹配。使用捕獲組(?P<>),我們將查詢(query)和頁數(page)作為參數傳遞給搜索結果視圖函數(search_results())。
3、設置URL名稱
# urls.py
from django.urls import path
from myapp import views
urlpatterns = [
path('blog/', views.BlogListView.as_view(), name='blog'),
]
在這個示例中,我們為URLpattern指定了一個名稱’blog’。通過指定URL名稱,我們可以在其他地方引用該URL,例如模板中的鏈接。
原創文章,作者:QXPI,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/145677.html