日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django2.x中url路由的path()与re_path()参数解释(亲测)

發(fā)布時間:2024/9/20 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django2.x中url路由的path()与re_path()参数解释(亲测) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在新版本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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。