Django路由之url分組(命名)匹配


分組(命名)匹配

 

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字典當做關鍵字參數傳遞給視圖函數
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM