標籤:highlight lazy res 運算式 pattern 請求 括弧 function 表達
Django處理request的步驟:
1.確定根URLconf
2.載入urls.py,找到變數urlpatterns,urlpatterns是django.conf.urls.url()
的執行個體對象(列表)
url(regex, view, kwargs=None, name=None)[source]regex是一個字串或者 ugettext_lazy(),字串包含Regex,相容re模組,字串通常使用原始字串文法(r“),以便它們可以包含像\ d這樣的序列,而不需要使用另一個反斜線來轉義反斜線。view參數是一個視圖函數,或者基於類的視圖的as_view()的結果,亦或者是一個include()。kwargs允許像視圖函數或者方法傳遞額外的參數,參見 Passing extra options to view functions查看執行個體。name參數的意義查看 Naming URL patterns
Naming URL patterns為了執行URL反轉,您需要使用命名URL模式,如上例所示。 用於URL名稱的字串可以包含您喜歡的任何字元。 當您命名URL模式時,請確保使用不太可能與任何其他應用程式選擇的名稱衝突的名稱。 如果您調用了URL模式注釋,而另一個應用程式也執行相同的操作,那麼在使用此名稱時,不能保證在您的模板中插入哪個URL。在您的網址名稱上放置一個首碼,也許是從應用程式名稱派生出來的,可以減少碰撞的幾率。 我們建議像myapp-comment而不是comment。
Passing extra options to view functionsURLconfs有一個鉤子,可以讓您傳遞額外的參數到您的視圖函數,作為Python字典。django.conf.urls.url()函數可以使用一個可選的第三個參數,它應該是一個額外的關鍵字參數的字典,以傳遞給view函數。例如:from django.conf.urls import urlfrom . import viewsurlpatterns = [ url(r‘^blog/(?P<year>[0-9]{4})/$‘, views.year_archive, {‘foo‘: ‘bar‘}),]在聯合架構中使用此技術將中繼資料和選項傳遞給視圖。
在這個例子中,對於/ blog / 2005 /的請求,Django將調用views.year archive(request,year =‘2005‘,foo =‘bar‘)。
處理衝突:
可以使用一個URL模式來捕獲命名關鍵字參數,並在其額外參數的字典中傳遞具有相同名稱的參數。 當這種情況發生時,字典中的參數將被使用,而不是在URL中捕獲的參數。
3.Django按順序執行每一個URL模式,當第一個request的URL匹配即停止向下執行
4.一旦Regex匹配成功,Django匯入並執行視圖函數(或者基於類的視圖函數),以下參數可傳遞到視圖函數:
HttpRequest
執行個體對象
如果匹配的Regex沒有返回任何命名組,那麼來自Regex的匹配將作為位置參數提供。
關鍵字參數由Regex匹配的任何命名組組成,由在django.conf.urls.url()的可選kwargs參數中指定的任何參數覆蓋。
5.如果沒有Regex匹配,或者在此過程中的任何一點出現異常,Django將調用適當的錯誤處理視圖。 參見下面的錯誤處理。
命名組
上述樣本使用簡單的,未命名的Regex組(通過括弧)捕獲URL的位,並將它們作為位置參數傳遞給視圖。 在更進階的使用中,可以使用命名的Regex組來捕獲URL位,並將它們作為關鍵字參數傳遞給視圖。
在PythonRegex中,命名的Regex組的文法是(?P <name> pattern),其中name是組的名稱,而pattern是某些匹配的模式。
Django學習之URLconf