Django2.x中url路由的path()与re_path()参数解释(亲测)
在新版本Django2.x中,url的路由表示用path和re_path代替,模塊的導(dǎo)入由django1.x版本的from django.conf.urls import url,include變成現(xiàn)在的Django2.x中的from django.urls import path, re_path, include
看下面兩幅圖:
- Django1.10
而且該url()函數(shù)傳遞了四個參數(shù),兩個必需:regex和view,以及兩個可選:kwargs,和name。也就是正則表達(dá)式和視圖是兩個必填參數(shù)。
?
- Django2.1
?
函數(shù)?path()?具有四個參數(shù),兩個必須參數(shù):route?和?view,兩個可選參數(shù):kwargs?和?name。即路由和視圖是必填參數(shù)。
那么與舊版本的參數(shù)主要區(qū)別就在于url()是要寫正則表達(dá)式(regex)的路由,而path()是寫的非正則路由(route),接下來主要看一下path()函數(shù)的四個參數(shù)含義。
1、path()參數(shù):routeroute 是一個匹配URL的準(zhǔn)則(類似正則表達(dá)式)。當(dāng)Django響應(yīng)一個請求時,它會從urlpatterns的第一項開始,按順序依次匹配列表中的項,直到找到匹配的項。這些準(zhǔn)則不會匹配GET和POST參數(shù)或域名。例如,URLconf在處理請求https://www.example.com/myapp/時,它會嘗試匹配myapp/。處理請求https://www.example.com/myapp/?page=3 時,也只會嘗試匹配 myapp/。 2、path()參數(shù):view當(dāng) Django 找到了一個匹配的準(zhǔn)則,就會調(diào)用這個特定的視圖函數(shù),并傳入一個HttpRequest對象作為第一個參數(shù),被“捕獲”的參數(shù)以關(guān)鍵字參數(shù)的形式傳入。 3、path()參數(shù):kwargs任意個關(guān)鍵字參數(shù)可以作為一個字典傳遞給目標(biāo)視圖函數(shù)。 4、path()參數(shù):name為你的URL取名能使你在 Django 的任意地方唯一地引用它,尤其是在模板中。這個有用的特性允許你只改一個文件就能全局地修改某個URL模式。參考文檔:https://docs.djangoproject.com/zh-hans/2.1/intro/tutorial01/?
?
在Django2.1中,開始舍棄django1.x中的url寫法。在django2.x中,描寫url配置的有兩個函數(shù)path和re_path
path()
上面介紹的path中,第一個參數(shù)route使用的是非正則表達(dá)式可以表示的普通路由路徑。
注意:
- 要從URL捕獲值,請使用尖括號。
- 捕獲的值可以選擇包括轉(zhuǎn)換器類型。例如,用于?<int:name>捕獲整數(shù)參數(shù)。如果未包含轉(zhuǎn)換器/,則匹配除字符之外的任何字符串。
- 沒有必要添加前導(dǎo)斜杠,因為每個URL都有。例如,它articles不是/articles。
默認(rèn)情況下,以下路徑轉(zhuǎn)換器可用:
- str- 匹配除路徑分隔符之外的任何非空字符串'/'。如果轉(zhuǎn)換器未包含在表達(dá)式中,則這是默認(rèn)值。
- int?- 匹配零或任何正整數(shù)。返回一個int。
- slug?- 匹配由ASCII字母或數(shù)字組成的任何slug字符串,以及連字符和下劃線字符。例如,?building-your-1st-django-site。
- uuid?- 匹配格式化的UUID。要防止多個URL映射到同一頁面,必須包含短劃線并且字母必須為小寫。例如,075194d3-6885-417e-a8a8-6c931e272f00。返回一個?UUID實例。
- path- 匹配任何非空字符串,包括路徑分隔符?'/'。這使您可以匹配完整的URL路徑,而不僅僅是URL路徑的一部分str。
比如要匹配一個視圖中的函數(shù)路由,該函數(shù)有兩個形參:
def peopleList(request,book_id)
第一個request是默認(rèn)的,那么路徑自動匹配該函數(shù)的第二個形參,匹配格式:<int:book_id>,并返回一個正整數(shù)或零值。
re_path()
而如果遇上路徑和轉(zhuǎn)換器語法都不足以定義的URL模式,那么就需要使用正則表達(dá)式,這時候就需要使用re_path(),而非path()。
1 from django.urls import re_path在Python正則表達(dá)式中,命名正則表達(dá)式組的語法是(?P<name>pattern),組name的名稱,并且?pattern是要匹配的模式。
還是以上圖圈中的部分為例,也是可以用正則表達(dá)式來寫的。如下:
1 re_path(r'^(\d+)/$',views.peopleList,name='peopleList'),這樣也是可以匹配到views視圖中的peopleList函數(shù)的形參的。
所以這兩種使用方式在使用上根據(jù)實際情況自行使用。
額外補(bǔ)充:
在二級路由(也即app的urls文件中),在urlpatterns后,應(yīng)該加上app_name='app_name(你的app名稱)',否則會報錯。
學(xué)三境: 一境:昨夜西風(fēng)凋碧樹,獨(dú)上高樓,望盡天涯路; 二境:衣帶漸寬終不悔,為伊消得人憔悴; 三境:眾里尋‘它’千百度,驀然回首,那斯卻在,燈火闌珊處。
來源:https://www.cnblogs.com/cpl9412290130/p/9611293.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Django2.x中url路由的path()与re_path()参数解释(亲测)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基金被动卖出是怎么回事
- 下一篇: 70周年纪念钞现场兑换网点