Django反向解析和命名空間

2022-07-25 19:45:15 字數 2666 閱讀 2448

在實際的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 import

path

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 import

path

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 import

path

from . import

views

polls

'urlpatterns =[

path(

'', views.indexview.as_view(), name='

index'),

path('/

', views.detailview.as_view(), name='

detail'),

...]

urls.py:

from django.urls import

include, path

urlpatterns =[

path(

'polls/

', include('

polls.urls

')),

]

此時,polls.urls中定義的url將具有應用命名空間polls。

include乙個包含巢狀命名空間資料的物件。

例如:

from django.urls import

include, 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...