Django路由系統

2022-06-01 14:36:11 字數 4406 閱讀 8289

#

基本格式

from django.conf.urls import

urlurlpatterns =[

url(正規表示式, views檢視函式,引數,別名),]#

引數說明

正規表示式:乙個正規表示式字串

views檢視函式:乙個可呼叫物件,通常為乙個檢視函式或乙個指定檢視函式路徑的字串

引數:可選的,要傳遞給檢視函式的預設引數(字典形式)

別名:乙個可選的name引數

#

基本配置

from django.conf.urls import

urlfrom . import

views

urlpatterns =[

url(r

'^articles/2003/$

', views.special_case_2003),

url(r

'^articles/([0-9])/$

', views.year_archive),

url(r

'^articles/([0-9])/([0-9])/$

', views.month_archive),

url(r

'^articles/([0-9])/([0-9])/([0-9]+)/$

', views.article_detail),]#

注意事項

urlpatterns中的元素按照書寫順序從上往下逐一匹配正規表示式,一旦匹配成功則不再繼續。

若要從url中捕獲乙個值,只需要在它周圍放置一對圓括號(分組匹配)。

不需要新增乙個前導的反斜槓,因為每個url 都有。例如,應該是^articles 而不是 ^/articles。

每個正規表示式前面的'r

' 是可選的但是建議加上。

在python的正規表示式中,分組命名正規表示式組的語法是(?ppattern),其中name是組的名稱,pattern是要匹配的模式。

#

這個實現與前面的示例完全相同,只有乙個細微的差別:捕獲的值作為關鍵字引數而不是位置引數傳遞給檢視函式。

from django.conf.urls import

urlfrom . import

views

urlpatterns =[

url(r

'^articles/2003/$

', views.special_case_2003),

url(r

'^articles/(?p[0-9])/$

', views.year_archive),

url(r

'^articles/(?p[0-9])/(?p[0-9])/$

', views.month_archive),

url(r

'^articles/(?p[0-9])/(?p[0-9])/(?p[0-9])/$

', views.article_detail),

]

#

檢視函式中指定預設值

#urls.py中

from django.conf.urls import

urlfrom . import

views

urlpatterns =[

url(r

'^blog/$

', views.page),

url(r

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

', views.page),]#

views.py中,可以為num指定預設值

def page(request, num="1"

):

pass

#

include 其他的urlconfs

from django.conf.urls import

include, url

urlpatterns =[

url(r

'^admin/

', admin.site.urls),

url(r

'^blog/

', include('

blog.urls

')), #

可以包含其他的urlconfs檔案,還是先訪問源根資料夾下邊的urls

#

分組匹配 --> 相當於給檢視函式傳遞位置引數

#分組命名匹配 --> 相當於給檢視函式傳遞關鍵字引數,和上邊的不能混著用

在需要url 的地方,對於不同層級,django 提供不同的工具用於url 反查:

#

### 舉個例子

#urls.py

url(r'

^home

', views.home, name='

home

'), #

給我的url匹配模式起名為 home

url(r'

^index/(\d*)

', views.index, name='

index

'), #

給我的url匹配模式起名為index

#在模板裡面可以這樣引用:

#在views函式中可以這樣引用:

from django.urls import

reverse

reverse(

"index

", args=("

2018

", ))

#

### 例子高階

#urls.py

from django.conf.urls import

urlfrom . import

views

urlpatterns =[

#...

url(r'

^articles/([0-9])/$

', views.year_archive, name='

news-year-archive'),

#...]#

在模板裡面可以這樣引用:

"">2012 archive

#在views函式中可以這樣引用:

from django.urls import

reverse

from django.shortcuts import

redirect

defredirect_to_year(request):

#...

year = 2006

#...return redirect(reverse('

news-year-archive

', args=(year,)))

#

project中的urls.py

from django.conf.urls import

url, include

urlpatterns =[

url(r

'', include('

', namespace='

')),

url(r

'', include('

', namespace='

')),]#

from django.conf.urls import

urlviews '

urlpatterns =[

url(r

'^(?p\d+)/$

', views.detail, name='

detail')

]#from django.conf.urls import

urlviews '

urlpatterns =[

url(r

'^(?p\d+)/$

', views.detail, name='

detail')

]

#

模板中使用:

#views中的函式中使用

v = reverse('

', kwargs=)

Django路由系統

urlpatterns path 要匹配的路徑 可以是正規表示式 檢視函式,引數,別名 1 正規表示式 乙個正規表示式字串 2 檢視函式 乙個可呼叫物件,通常為乙個檢視函式或乙個指定檢視函式路徑的字串 3 引數 要傳遞給檢視函式的預設引數 字典形式,可選 4 別名 乙個可選的name引數 1 在py...

Django路由系統

普通的url 函式 有傳遞引數的url django2以上版本,使用正規則要用re path,之前的版本使用url re path add w add 一樣功能 path add add re path r add2 p w p d add path add2 add2 路由分發 使用include...

django 路由系統

1.正規表示式的模糊匹配 2.分組匹配 相當於給檢視函式傳遞位置引數 3.分組命名匹配 相當於給檢視函式傳遞關鍵字引數 兩個不要混合使用 位置傳參 路由 url r book1 0 9 a za z views.book1 接收 位置引數 def book1 request,arg1,arg2 pr...