5 Django 1 的路由層

2022-03-16 16:22:12 字數 3884 閱讀 9809

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

from django.conf.urls import url

from . 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 url

from . 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 url

from . import views

urlpatterns = [

#...

url(r'^articles/([0-9])/$', views.year_archive, name='news-year-archive'),

#...

]

在模板中:

2012 archive
在python中:

return httpresponseredirect(reverse('news-year-archive', args=(year,))) # 同redirect("/path/")

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

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

project的urls.py:

urlpatterns = [

url(r'^admin/', admin.site.urls),

]

urlpatterns = [

url(r'^index/', index,name="index"),

]

urlpatterns = [

url(r'^index/', index,name="index"),

]

from django.core.urlresolvers import reverse

def index(request):

from django.core.urlresolvers import reverse

def index(request):

Django的路由層

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

Django的日常 路由層

目錄反向解析 路由的分發 我們之前已經接觸過路由層,只是我們可能不知道他叫這個名字,實際上在django裡面路由層指的就是urls.py這個檔案.路由的概念是什麼,我們平時生活中接觸最多的和路由有關的大概就是路由器了,那麼路由器是幹嘛的?路由器是連線多個網路的硬體裝置,在網路之間起到閘道器的作用,可...

django之路由層

1.django中urls.py負責url的路由分發urlpatterns url r admin admin.site.urls url的第乙個引數實際為乙個正規表示式,第二個引數為檢視函式。瀏覽器訪問時,會遍歷該列表,匹配到則終止,不再往下匹配。當使用者訪問的url不存在時,django會嘗試將...