django3 路由系統高階

2022-08-15 19:36:12 字數 3533 閱讀 3136

1.django的url到底是什麼

就是路徑 ,看成django的目錄 ,每個目錄對應個檢視函式 ,當然乙個url僅能對應乙個函式

2.url的格式 

url(正規表示式,views函式名,引數,別名)

這裡的正規表示式有個問題就是可能會匹配到多個路徑 ,匹配的方式是從上到下匹配即停 ,所以正則一定要嚴謹防止截胡

斜線' / '末尾加上會好很多,開頭不用加

#

urls.py

載入應用的位址函式模組

urlpatterns =[

url(r

'^admin/$

', admin.site.urls),

url(r

'^admin/add/

', admin.site.urls),

url(r

'^admin/del/

', admin.site.urls),

url(正規表示式,views函式,引數,別名),

]

3.路由分發

#/專案目錄下/urls.py

4.分組與命名分組

分組是在做什麼? 我們傳參可以使用get中的url攜帶引數 ,我們還能用分組直接獲得引數傳給檢視函式 ,方便了不少呢

1).分組(肯定是正則的分組, 一組乙個引數 ,引數僅僅能傳遞str型別)

#urls.py中

url(r'

^press/del/(\d+)/

', views.pressdel),    #使用正則匹配乙個分組

#views.py中

#html中
#點選時可以觸發url

2).命名分組 ,和分組的區別就是使用的是關鍵字引數 ,可以不考慮順序傳遞引數了

#

urls.py中

url(r

'^press/del/?p(\d+)/

', views.pressdel),    #

使用正則匹配乙個分組

#views.py中

def pressdel(request, del_id):           #

接收url中的位置引數

models.presslist.objects.get(pk=del_id).delete()

return redirect('')

#html中

href="

">class="

fa fa-remove

" aria-hidden="

true

">

#點選時可以觸發url

3).命名分組之預設值分組 ,預設值分組的意義是什麼? 訪問不帶引數時的預設值 ,如下面的情況

#

urls.py檔案

url(r'

^blog/page/$

', views.blog),      #訪問首頁沒有引數的時候 ,檢視函式中num=9999

url(r

'^blog/page/(?p[0-9])

', views.blog),  #訪問帶頁碼的引數時 ,檢視函式會使用分組中的num值

#views.py

def blog(request,num='

9999

'):

5.路由的別名

場景: 重新規劃了一下urls中的正則匹配位址 ,此時檢視函式與模板中寫死的跳轉就都變了 ,那麼改動實在太多了 ,使用路由別名! 每個url的正則無論如何變化 ,他的別名都不會變化

1).靜態別名 ,就是url中沒有攜帶引數(反向解析就是僅關注別名 ,別名後面如何不用管這就是反向解析)

檢視函式中使用reverse()函式解析 ,模板中使用解析

#

urls.py檔案

url(r'

^halias/$

', views.halias, name='hs'

),url(r

'^ralias/$

', views.ralias, name='rs'

),#views.py檔案的redirect

defhalias(request):

return render(request, '

test.html')

defralias(request):

return redirect(reverse('rs'

))#html檔案

" > 重新整理操作 < / a >

2).動態別名 ,就是url中夾帶了引數 ,反向解析的時候有點不同 ,其中分為引數為位置引數或者是關鍵字引數

####位置引數解析

#urls.py檔案

url(r'

^halias/([0-9])/(..)/$

', views.halias,name='hs'

),#在

views.py檔案redirect(reverse)

defhalias(request,c1,c2):

if c1 == '1'

:

return redirect(reverse('

hs',args=('

34','op'

)))

return render(request,'

test.html

',)

#在html檔案

"">重新整理操作

####關鍵字引數解析

#urls.py檔案

url(r'^halias/([0-9])/(..)/$', views.halias,name='hs'),

#在views.py檔案redirect(reverse)

defhalias(request,c1,c2):

if c1 == '1':

return redirect(reverse('hs',kwargs=))

return render(request,'test.html',)

#在html檔案

重新整理操作

6.路由命名空間

#

project/urls.py檔案

urlpatterns =[

url(r

'', include('

',namespace='

ap1'

)), url(r

'', include('

',namespace='

ap2'

)),]

#html檔案引入別名改動

"">命名空間測試重新整理當前頁

#views.py重定向使用別名時

....

return redirect(reverse('

ap1:cbs

',arg...

))...

7.url相關規範

1)路由要在跟路由處完成分發 ,避免路由表過大

Django(七) 路由系統

一般使用者通過瀏覽器向我們的伺服器發起乙個請求 request 這個請求回去訪問檢視函式,如果不涉及到資料呼叫,那麼這個時候檢視函式返回乙個模板也就是乙個網頁給使用者 檢視函式呼叫模型,模型去資料庫查詢資料,然後逐級返回,檢視函式把返回的資料填充到模板中空格中,最後返回網頁給使用者。路由系統就是路徑...

Django的路由系統01 路由分發

範例 from django.conf.urls import url from django.contrib import admin urlpatterns url r admin admin.site.urls url r publisher list views.publist.as vie...

3 路由配置

一 路由配置 path path 函式 匯入 from django.urls import path 語法 path route,views,name none 引數 1.route 字串型別,匹配的請求路徑 2.views 指定路徑所對應的檢視處理函式的名稱 3.name 為位址起別名,在模版中...