新聞中心
如果路徑和轉(zhuǎn)化器語法不能很好的定義你的 URL 模式,你可以可以使用正則表達(dá)式。如果要這樣做,請使用 ?re_path()? 而不是 ?path()? 。

在武陟等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作定制網(wǎng)站開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),成都全網(wǎng)營銷,外貿(mào)網(wǎng)站建設(shè),武陟網(wǎng)站建設(shè)費(fèi)用合理。
在 Python 正則表達(dá)式中,命名正則表達(dá)式組的語法是 ?(?P? ,其中 ?name ?是組名,?pattern ?是要匹配的模式。
這里是先前 ?URLconf ?的一些例子,現(xiàn)在用正則表達(dá)式重寫一下:
from django.urls import path, re_path
from . import views
urlpatterns = [
path('articles/2003/', views.special_case_2003),
re_path(r'^articles/(?P[0-9]{4})/, views.year_archive),
re_path(r'^articles/(?P[0-9]{4})/(?P[0-9]{2})/, views.month_archive),
re_path(r'^articles/(?P[0-9]{4})/(?P[0-9]{2})/(?P[\w-]+)/, views.article_detail),
]
這實(shí)現(xiàn)了與前面示例大致相同的功能,除了:
- 將要匹配的 URLs 將稍受限制。比如,10000 年將不在匹配,因?yàn)?year 被限制長度為4。
- 無論正則表達(dá)式進(jìn)行哪種匹配,每個(gè)捕獲的參數(shù)都作為字符串發(fā)送到視圖。
當(dāng)從使用 ?path()? 切換到 ?re_path()? (反之亦然),要特別注意,視圖參數(shù)類型可能發(fā)生變化,你可能需要調(diào)整你的視圖。
使用未命名的正則表達(dá)式組
還有命名組語法,例如 ?(?P? ,你也可以使用更短的未命名組,例如 ?([0-9]{4})? 。
不是特別推薦這個(gè)用法,因?yàn)樗鼤?huì)更容易在匹配的預(yù)期含義和視圖參數(shù)之間引發(fā)錯(cuò)誤。
在任何情況下,推薦在給定的正則表達(dá)式里只使用一個(gè)樣式。當(dāng)混雜兩種樣式時(shí),任何未命名的組都會(huì)被忽略,而且只有命名的組才會(huì)傳遞給視圖函數(shù)。
嵌套參數(shù)
正則表達(dá)式允許嵌套參數(shù),Django 將處理它們并傳遞給視圖。當(dāng)轉(zhuǎn)換時(shí),Django 將試著填充給所有外部捕捉參數(shù),忽略任何嵌套捕捉參數(shù)??紤]下面可選的帶有頁面參數(shù)的 URL 模式:
from django.urls import re_path
urlpatterns = [
re_path(r'^blog/(page-(\d+)/)?, blog_articles), # bad
re_path(r'^comments/(?:page-(?P\d+)/)?, comments), # good
]
兩個(gè)模式使用嵌套參數(shù),并處理:例如, ?blog/page-2/? 將匹配給 ?blog_articles? 并帶有2個(gè)參數(shù):?page-2/? 和 ?2 ?。第二個(gè)模式為 ?comments ?匹配 ?comments/page-2/? 并帶有設(shè)置為2的關(guān)鍵參數(shù) ?page_number ?。這個(gè)案例里的外部參數(shù)是一個(gè)非捕捉參數(shù) (?:...) 。
?blog_articles ?視圖需要反轉(zhuǎn)最外層捕捉的參數(shù),?page-2/? 在這里不需要參數(shù),而 ?comments可以在沒有參數(shù)或 ?page_number值的情況下反轉(zhuǎn)。
嵌套捕捉參數(shù)在視圖參數(shù)和 URL 直接創(chuàng)建一個(gè)強(qiáng)耦合,如 ?blog_articles所示:視圖接收部分 URL (?page-2/?) 而不只是視圖要的值。當(dāng)反轉(zhuǎn)時(shí)這種耦合更明顯,因?yàn)榉崔D(zhuǎn)視圖我們需要傳遞一段 URL 而不是 ?page number?。
根據(jù)經(jīng)驗(yàn),只有當(dāng)正則表達(dá)式需要一個(gè)參數(shù)但視圖忽略它時(shí),才捕捉該視圖需要的值并使用非捕捉參數(shù)。
網(wǎng)頁題目:創(chuàng)新互聯(lián)Django4.0教程:Django4.0URL調(diào)度器-使用正則表達(dá)式
文章轉(zhuǎn)載:http://www.dlmjj.cn/article/dhcjdej.html


咨詢
建站咨詢
