分組(命名)匹配
urls.py路由配置文件中:
urlspatterns中想捕獲正則表達式匹配的結果用來出傳遞給views.py視圖函數文件使用,需要用到分組匹配,或者使用第三個參數python字典進行傳參。
無名分組:(正則)
位置參數:匹配出的結果按順序依次傳遞給視圖函數的形參(形參必須有序,匹配值按位置順序進行傳遞)
有名分組:(?P<name>正則)
關鍵字參數:匹配出的結果按照命名對應傳遞給視圖函數的形參(形參可以無序,匹配值按命名進行傳遞)
urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^articles/2003/$', views.special_case_2003),
#注意正則匹配出來的內容是字符串,即便是你在url里面寫的是2003數字,匹配出來之后也是字符串
url(r'^articles/(\d{4})/$', views.year_archive),
#year_archive(request,n),小括號為分組,有分組,那么這個分組得到的用戶輸入的內容,就會作為對應函數的位置參數傳進去,別忘了形參要寫兩個了,明白了嗎?
url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
#某年的,(?P<year>[0-9]{4})這是命名參數(正則命名匹配還記得嗎?),那么函數year_archive(request,year),形參名稱必須是year這個名字。而且注意如果你這個正則后面沒有寫$符號,即便是輸入了月份路徑,也會被它攔截下拉,因為它的正則也能匹配上
url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),#某年某月的
url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', views.article_detail),
#某年某月某日的
]
views.py
views.py中視圖函數的寫法:
第一個參數必須是request,后面跟的三個參數是對應着上面分組命名正則匹配的每個參數,位置可以隨意
def article_detail(request,month,day,year):
return HttpResponse(year+month+day)
正則匹配捕獲參數和視圖函數參數:
視圖函數的參數規則與普通函數參數規則一致,在url()映射中可以接受第三個參數python字典當做關鍵字參數傳遞給視圖函數