django中路由匹配中正則提取參數(shù)機制詳解
更新時間:2025年05月14日 11:12:43 作者:stzhuce
這篇文章主要介紹了django中路由匹配中正則提取參數(shù)機制方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
django路由匹配示例
下面是我們的示例代碼:
# 路由 from django.urls import path, re_path from . import views urlpatterns = [ path('articles/2003/', views.special_case_2003), # 2.0以前版本 是url,現(xiàn)在是re_path 主要是通過正則來匹配 re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive), ] # 視圖層 def month_archive(request,year,month): pass
路由參數(shù)傳遞剖析
django是如何把路由參數(shù)獲取并傳遞給視圖呢?
從字面上我們可以看出來來,【正則路】所以這里面它巧妙的利用了正則的分組特性,并通過參數(shù)解包特性來完成,下面我們演示下大致的流程
假設(shè):我們訪問了的path是: articles/2021/11/
1.利用正則分組匹配獲取分組參數(shù)
import re path = "articles/2021/11/" # 使用 正則去匹配路由 res = re.search(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$',path) if not res: print("匹配失敗!") else: # 提取path參數(shù),利用分組 kwargs = res.groupdict()
利用分組我們就可以正常的把里面path參數(shù)獲取到:
{'year': '2021', 'month': '11'}
2.我們利用解包特性把對應(yīng)的參數(shù)傳遞給視圖
# 偽代碼,調(diào)用視圖, # 這中情況可能會更友好,直接通過關(guān)鍵詞方式調(diào)用,不影響我們方法定義的時候參數(shù)位置 # 但是實際django利用的是位置參數(shù)傳遞 month_archive(request,**kwargs) # 上面的就等價于 month_archive(request, year="2021", month="11") # 下面是位置參數(shù)傳遞,注意這是在正則提取的結(jié)果上進一步操作 # 1. 提取分組結(jié)果 args = res.groups() #('2021', '11') # 2. 調(diào)用視圖,這樣就限制了其位置 month_archive(request,*args) # 上面的代碼等價于 month_archive(request,"2011","11")
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用實現(xiàn)XlsxWriter創(chuàng)建Excel文件并編輯
今天小編就為大家分享一篇使用實現(xiàn)XlsxWriter創(chuàng)建Excel文件并編輯,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05Cpython3.9源碼解析python中的大小整數(shù)
這篇文章主要介紹了Cpython3.9源碼解析python中的大小整數(shù),在CPython中,小整數(shù)對象池是一種優(yōu)化機制,用于減少對常用小整數(shù)的內(nèi)存分配和銷毀開銷,需要的朋友可以參考下2023-04-04