Django2.x中url路由的path()與re_path()參數解釋


在新版本Django2.x中,url的路由表示用pathre_path代替,模塊的導入由django1.x版本的from django.conf.urls import url,include變成現在的Django2.x中的from django.urls import path, re_path, include

看下面兩幅圖:

  • Django1.10

而且url()函數傳遞了四個參數,兩個必需:regexview,以及兩個可選:kwargs,和name。也就是正則表達式和視圖是兩個必填參數。


 

  • Django2.1

 

函數 path() 具有四個參數,兩個必須參數:route 和 view,兩個可選參數:kwargs 和 name。即路由和視圖是必填參數。

那么與舊版本的參數主要區別就在於url()是要寫正則表達式(regex)的路由,而path()是寫的非正則路由(route),接下來主要看一下path()函數的四個參數含義。

1、path()參數:route
    route 是一個匹配URL的准則(類似正則表達式)。當Django響應一個請求時,它會從urlpatterns的第一項開始,按順序依次匹配列表中的項,直到找到匹配的項。
    這些准則不會匹配GET和POST參數或域名。例如,URLconf在處理請求https://www.example.com/myapp/時,它會嘗試匹配myapp/。處理請求https://www.example.com/myapp/?page=3 時,也只會嘗試匹配 myapp/2、path()參數:view
    當 Django 找到了一個匹配的准則,就會調用這個特定的視圖函數,並傳入一個HttpRequest對象作為第一個參數,被“捕獲”的參數以關鍵字參數的形式傳入。
3、path()參數:kwargs
    任意個關鍵字參數可以作為一個字典傳遞給目標視圖函數。
4、path()參數:name
    為你的URL取名能使你在 Django 的任意地方唯一地引用它,尤其是在模板中。這個有用的特性允許你只改一個文件就能全局地修改某個URL模式。

參考文檔:https://docs.djangoproject.com/zh-hans/2.1/intro/tutorial01/ 


 

在Django2.1中,開始舍棄django1.x中的url寫法。在django2.x中,描寫url配置的有兩個函數pathre_path

path()

上面介紹的path中,第一個參數route使用的是非正則表達式可以表示的普通路由路徑。

注意:

  • 要從URL捕獲值,請使用尖括號。
  • 捕獲的值可以選擇包括轉換器類型。例如,用於 <int:name>捕獲整數參數。如果未包含轉換器/,則匹配字符之外的任何字符串
  • 沒有必要添加前導斜杠,因為每個URL都有。例如,它articles不是/articles

默認情況下,以下路徑轉換器可用:

  • str- 匹配除路徑分隔符之外的任何非空字符串'/'如果轉換器未包含在表達式中,則這是默認值。
  • int - 匹配零或任何正整數。返回一個int
  • slug - 匹配由ASCII字母或數字組成的任何slug字符串,以及連字符和下划線字符。例如, building-your-1st-django-site
  • uuid - 匹配格式化的UUID。要防止多個URL映射到同一頁面,必須包含短划線並且字母必須為小寫。例如,075194d3-6885-417e-a8a8-6c931e272f00返回一個 UUID實例。
  • path- 匹配任何非空字符串,包括路徑分隔符 '/'這使您可以匹配完整的URL路徑,而不僅僅是URL路徑的一部分str

比如要匹配一個視圖中的函數路由,該函數有兩個形參:

def peopleList(request,book_id)

第一個request是默認的,那么路徑自動匹配該函數的第二個形參,匹配格式:<int:book_id>,並返回一個正整數或零值。

re_path()

而如果遇上路徑和轉換器語法都不足以定義的URL模式,那么就需要使用正則表達式,這時候就需要使用re_path(),而非path()。

1 from django.urls import re_path

在Python正則表達式中,命名正則表達式組的語法是(?P<name>pattern)name的名稱,並且 pattern是要匹配的模式。

還是以上圖圈中的部分為例,也是可以用正則表達式來寫的。如下:

1 re_path(r'^(\d+)/$',views.peopleList,name='peopleList'),

這樣也是可以匹配到views視圖中的peopleList函數的形參的。

所以這兩種使用方式在使用上根據實際情況自行使用。


額外補充:

在二級路由(也即app的urls文件中),在urlpatterns后,應該加上app_name='app_name(你的app名稱)',否則會報錯。


免責聲明!

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



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