Django从理论到实战(part9)--path和re_path
學(xué)習(xí)筆記,僅供參考
參考自:Django打造大型企業(yè)官網(wǎng);
本系列Blog以應(yīng)用為主,理論基礎(chǔ)部分我在后端專欄的Django系列博客已經(jīng)寫過了,如果有些需要補(bǔ)充的知識點(diǎn),我會在這個系列中,盡量詳細(xì)的寫一下。
path和re_path
path函數(shù)
語法
path(route,view,name=None,kwargs=None)
參數(shù)講解
- route參數(shù)
該參數(shù)指定了url的匹配規(guī)則。
我們在該參數(shù)中,可以指定url需要傳遞的參數(shù),比如在訪問文章詳情頁的時候,可以傳遞一個id。傳遞參數(shù)是通過<>尖括號來進(jìn)行指定的,并且在傳遞參數(shù)的時候,可以指定這個參數(shù)的數(shù)據(jù)類型(如果沒有指定任何數(shù)據(jù)類型則默認(rèn)為str類型),比如文章的id都是int類型,那么可以寫成 <int:id>的形式,在匹配的時候,就只會匹配到id為int類型的url,而不會匹配其他數(shù)據(jù)類型的url。
幾個常用的數(shù)據(jù)類型:
| str | 非空的字符串類型,默認(rèn)的轉(zhuǎn)換器,但是不能包含斜杠/ | [^/]+ |
| int | 匹配任意的零或者正數(shù)的整形,到視圖函數(shù)中就是一個int類型 | [0-9]+ |
| slug | 由英文中的橫杠-,或者下劃線_連接英文字符或者數(shù)字而成的字符串 | [-a-zA-Z0-9_]+ |
| uuid | 匹配uuid字符串,使用UUID類生成的字符串,是全球唯一的字符串 | [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} |
| path | 匹配非空的英文字符串,可以包含斜杠/ | .+ |
- view參數(shù)
該參數(shù)可以為一個視圖函數(shù),或者是類視圖.as_view(),或者是django.urls.include()函數(shù)的返回值。
- name參數(shù)
這個參數(shù)是給url取個名字,在項(xiàng)目比較大時,url比較多時,設(shè)置該參數(shù)用處很大。
- kwargs參數(shù)
有時候想給視圖函數(shù)傳遞一些額外的參數(shù),就可以通過kwargs參數(shù)進(jìn)行傳遞。這個參數(shù)接收一個字典,會通過關(guān)鍵字參數(shù)的方式傳到視圖函數(shù)中去,比如以下的url規(guī)則:
from django.urls import pathfrom . import viewsurlpatterns = [path('blog/<int:year>/', views.year_archive, {'foo': 'bar'}),]那么以后在訪問http://127.0.0.1:8000/blog/2020/的時候,會將foo=bar作為關(guān)鍵字參數(shù)傳給year_archive函數(shù)。
re_path函數(shù)
有時候我們在寫url匹配的時候,想要寫使用正則表達(dá)式來實(shí)現(xiàn)一些復(fù)雜的需求,那么這時候我們可以使用re_path來實(shí)現(xiàn)。
re_path的參數(shù)和path一樣,只不過第一個參數(shù)route可以為一個正則表達(dá)式,比如:
from django.contrib import admin from django.urls import path from . import views from django.urls import re_path #.表示從當(dāng)前包里導(dǎo)入urlpatterns = [path('admin/', admin.site.urls),re_path(r'year/(\d{4})/', views.year),re_path(r'birthday/(\d{4})/(\d{1,2})/(\d{1,2})/', views.page_birth),re_path(r'bunny/(?P<age>\d{1,2})/(?P<name>\w+)/', views.page_bunny),re_path(r'post_test/$', views.post_test),]以上例子中我們可以看到,所有的route字符串前面都加了一個r,表示這個字符串是一個原生字符串。在寫正則表達(dá)式中是推薦使用原生字符串的,這樣可以避免在python這一層面進(jìn)行轉(zhuǎn)義。
使用正則表達(dá)式捕獲參數(shù)時,我們需要用一個圓括號對正則表達(dá)式進(jìn)行包裹,參數(shù)名需要通過尖括號 <> 進(jìn)行包裹,并在尖括號 <> 前加上?P。
總結(jié)
以上是生活随笔為你收集整理的Django从理论到实战(part9)--path和re_path的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win7中使用网上银行或支付宝支付时总是
- 下一篇: Django从理论到实战(part10)