Django从理论到实战(part9)--path和re_path
學習筆記,僅供參考
參考自:Django打造大型企業官網;
本系列Blog以應用為主,理論基礎部分我在后端專欄的Django系列博客已經寫過了,如果有些需要補充的知識點,我會在這個系列中,盡量詳細的寫一下。
path和re_path
path函數
語法
path(route,view,name=None,kwargs=None)
參數講解
- route參數
該參數指定了url的匹配規則。
我們在該參數中,可以指定url需要傳遞的參數,比如在訪問文章詳情頁的時候,可以傳遞一個id。傳遞參數是通過<>尖括號來進行指定的,并且在傳遞參數的時候,可以指定這個參數的數據類型(如果沒有指定任何數據類型則默認為str類型),比如文章的id都是int類型,那么可以寫成 <int:id>的形式,在匹配的時候,就只會匹配到id為int類型的url,而不會匹配其他數據類型的url。
幾個常用的數據類型:
| str | 非空的字符串類型,默認的轉換器,但是不能包含斜杠/ | [^/]+ |
| int | 匹配任意的零或者正數的整形,到視圖函數中就是一個int類型 | [0-9]+ |
| slug | 由英文中的橫杠-,或者下劃線_連接英文字符或者數字而成的字符串 | [-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參數
該參數可以為一個視圖函數,或者是類視圖.as_view(),或者是django.urls.include()函數的返回值。
- name參數
這個參數是給url取個名字,在項目比較大時,url比較多時,設置該參數用處很大。
- kwargs參數
有時候想給視圖函數傳遞一些額外的參數,就可以通過kwargs參數進行傳遞。這個參數接收一個字典,會通過關鍵字參數的方式傳到視圖函數中去,比如以下的url規則:
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作為關鍵字參數傳給year_archive函數。
re_path函數
有時候我們在寫url匹配的時候,想要寫使用正則表達式來實現一些復雜的需求,那么這時候我們可以使用re_path來實現。
re_path的參數和path一樣,只不過第一個參數route可以為一個正則表達式,比如:
from django.contrib import admin from django.urls import path from . import views from django.urls import re_path #.表示從當前包里導入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,表示這個字符串是一個原生字符串。在寫正則表達式中是推薦使用原生字符串的,這樣可以避免在python這一層面進行轉義。
使用正則表達式捕獲參數時,我們需要用一個圓括號對正則表達式進行包裹,參數名需要通過尖括號 <> 進行包裹,并在尖括號 <> 前加上?P。
總結
以上是生活随笔為你收集整理的Django从理论到实战(part9)--path和re_path的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win7中使用网上银行或支付宝支付时总是
- 下一篇: Django从理论到实战(part10)