在實際的django專案中,經常需要獲取某條url,為生成的內容配置url鏈結。
在之前的django教程中,url用的都是硬編碼格式,這種格式費時、不可伸縮,而且容易出錯。若更改url則需要將之前所有鏈結該url都加以修改,工作量太大。
所以,需要一種安全、可靠、自適應的機制,當修改urlconf中的**後,無需在專案原始碼中大範圍搜尋、替換url。
為了解決這個問題,django提供了一種解決方案,只需在url中提供乙個name引數,並賦值乙個自定義的、好理解的、直觀的字串即可。
通過這個name引數,可以反向解析url、反向url匹配、反向url查詢或者簡單地url反查。
在需要解析url的地方,對於不同層級,django提供了不同的工具用於url反查:
·在模板語言中:使用url模板標籤。
·在檢視函式中:使用reverse()函式。
·在django模型model中:使用get_absolute_url()方法。
示例:
from django.urls importpath
from . import
views
urlpatterns =[
path(
'articles//
', views.year_archive, name='
news-year-archive'),
]
可以在模板的**中使用下面的方法獲得它:
<a href
="">2012 archive
a>
在檢視函式中,這樣使用:
其中,起到核心作用的是通過name
='news-year-archive'為那條url起了乙個可以被引用的名稱。
類似地,它還允許在乙個應用有多個例項部署的情況下反查url。 換句話講,因為乙個應用的多個例項共享相同的命名url,命名空間提供了一種區分這些命名url 的方法。
例如:
from django.urls importpath
from . import
views
polls
'urlpatterns =[
path(
'', views.indexview.as_view(), name='
index'),
path('/
', views.detailview.as_view(), name='
detail'),
...]
根據以上設定,可以使用下面的查詢。
在基於檢視的方法中:
reverse('polls:index
', ....)
在模板中:
可以通過兩種方式指定include的urlconf的應用命名空間。
polls/urls.py:
from django.urls importpath
from . import
views
polls
'urlpatterns =[
path(
'', views.indexview.as_view(), name='
index'),
path('/
', views.detailview.as_view(), name='
detail'),
...]
urls.py:
from django.urls importinclude, path
urlpatterns =[
path(
'polls/
', include('
polls.urls
')),
]
此時,polls.urls中定義的url將具有應用命名空間polls。
include乙個包含巢狀命名空間資料的物件。
例如:
from django.urls importinclude, path
from . import
views
polls_patterns =([
path(
'', views.indexview.as_view(), name='
index'),
path('/
', views.detailview.as_view(), name='
detail'),
], '
polls')
urlpatterns =[
path(
'polls/
', include(polls_patterns)),
]
django路由層 二 反向解析和命名空間
根據名字動態獲取到對應的路徑 可以給每乙個路由與檢視函式對應關係起乙個名字 這個名字能夠唯一標識出對應的路徑 注意這個名字不能重複是唯一的 通過別名來傳遞路徑給到前端或者後端,好處是更加靈活,因為是通過別名進行傳遞,所以只要修改源路徑,其他的層都不需要更改,否則如果直接通過源路徑傳遞,則耦合度較高,...
django url別名和反向解析 命名空間
我們平時寫的url名字都是死的,如果專案過大,需要專案中某個檔名改動一下,那麼改動起來就不是一般的麻煩了,所以我們就在定義的時候給url起乙個別名,以後不管哪個檔案中運用都是用它的別名,這樣就方便多了,你的路徑名不管怎麼改變都不會影響你的操作 如何給你url起別名 url r home1 views...
Django命名URL和反向解析URL實現解析
命名 url test.html 測試頁面 測試頁面 json test relbinbohwe external nofollow json 資料 urls.py from django.conf.urls import uwww.cppcns.comrl from app01 import vi...