5 1 Django的路由層 urlconf

2022-05-03 20:27:10 字數 4544 閱讀 9404

url配置(urlconf)就像django 所支撐**的目錄。它的本質是url與要為該url呼叫的檢視函式之間的對映表;你就是以這種方式告訴django,對於客戶端發來的某個url呼叫哪一段邏輯**對應執行。

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),

]

注意:示例:

'''

一些請求的例子:

/articles/2005/03/ 請求將匹配列表中的第三個模式。django 將呼叫函式views.month_archive(request, '2005', '03')。

/articles/2005/3/ 不匹配任何url 模式,因為列表中的第三個模式要求月份應該是兩個數字。

/articles/2003/ 將匹配列表中的第乙個模式不是第二個,因為模式按順序匹配,第乙個會首先測試是否匹配。請像這樣自由插入一些特殊的情況來探測匹配的次序。

/articles/2003 不匹配任何乙個模式,因為每個模式要求url 以乙個反斜線結尾。

/articles/2003/03/03/ 將匹配最後乙個模式。django 將呼叫函式views.article_detail(request, '2003', '03', '03')。

'''

上面的示例使用簡單的、沒有命名的正規表示式組(通過圓括號)來捕獲url 中的值並以位置 引數傳遞給檢視。在更高階的用法中,可以使用命名的正規表示式組來捕獲url 中的值並以關鍵字 引數傳遞給檢視。

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

下面是以上urlconf 使用命名組的重寫:

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),

]

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

'''

/articles/2005/03/ 請求將呼叫views.month_archive(request, year='2005', month='03')函式,而不是views.month_archive(request, '2005', '03')。

/articles/2003/03/03/ 請求將呼叫函式views.article_detail(request, year='2003', month='03', day='03')。

'''

在實際應用中,這意味你的urlconf 會更加明晰且不容易產生引數順序問題的錯誤 —— 你可以在你的檢視函式定義中重新安排引數的順序。當然,這些好處是以簡潔為代價;

'''

at any point, your urlpatterns can 「include」 other urlconf modules. this

essentially 「roots」 a set of urls below other ones.

including another urlconf

1. add an import: from blog import urls as blog_urls

2. add a url to urlpatterns: url(r'^blog/', include(blog.urls))

'''from django.conf.urls import

include, url

urlpatterns =[

url(r

'^admin/

', admin.site.urls),

url(r

'^blog/

', include('

blog.urls

')),

]

在使用django 專案時,乙個常見的需求是獲得url 的最終形式,以用於嵌入到生成的內容中(檢視中和顯示給使用者的url等)或者用於處理伺服器端的導航(重定向等)。人們強烈希望不要硬編碼這些url(費力、不可擴充套件且容易產生錯誤)或者設計一種與urlconf 毫不相關的專門的url 生成機制,因為這樣容易導致一定程度上產生過期的url。

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

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

在python中:

同redirect("/path/")

命名空間(英語:namespace)是表示識別符號的可見範圍。乙個識別符號可在多個命名空間中定義,它在不同命名空間中的含義是互不相干的。這樣,在乙個新的命名空間中可定義任何識別符號,它們不會與任何已有的識別符號發生衝突,因為已有的定義都處於其它命名空間中。

由於name沒有作用域,django在反解url時,會在專案全域性順序搜尋,當查詢到第乙個name指定url時,立即返回

project的urls.py:

Django的路由層

一 簡單的路由配置 from django.conf.urls import urlviews urlpatterns path views.index 二 有名分組 先欠著三 分發 from django.conf.urls import include,url urlpatterns url r...

Django 路由正則URL

django 路由正則url url1 路由url r detail views.detail blank href detail nid url2 返回乙個值,d 也可以寫為w 任意正則 url r detail d html views.detail blank href detail html...

Django的路由系統 URL

基本格式 from django.conf.urls import url urlpatterns url 正規表示式,views檢視,引數,別名 django 2.0版本的路由系統 from django.urls import path,re path urlpatterns path arti...