Django學習之URLconf

來源:互聯網
上載者:User

標籤: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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.