日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)Django4.0教程:Django4.0URL調(diào)度器-URL命名空間

介紹

URL 命名空間允許你使用唯一的反向命名URL模式( named URL patterns ),即便不同應用程序使用相同的 URL 名稱。對于第三方應用程序來說,始終使用 URL 命名空間是個好習慣(像在教程里說的那樣)。同樣,如果已部署了應用程序的多個實例,它也允許你反向解析 URL。換句話說,因為單個應用的多個實例會分享已命名的 URL,命名空間提供了區(qū)分這些已命名 URL 的方法。

創(chuàng)新互聯(lián)建站服務(wù)項目包括察哈爾右翼中旗網(wǎng)站建設(shè)、察哈爾右翼中旗網(wǎng)站制作、察哈爾右翼中旗網(wǎng)頁制作以及察哈爾右翼中旗網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,察哈爾右翼中旗網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到察哈爾右翼中旗省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

對于特定站點,正確使用URL名稱空間的Django應用程序可以部署多次。比如 ?django.contrib.admin? 有一個 ?AdminSite ?,它允許admin實例部署多次。

URL 命名空間分為兩部分,它們都是字符串:

應用程序命名空間

這描述了正在部署的程序名。單個應用的每個實例擁有相同的命名空間。比如,Django admin 應用有可預測的應用命名空間 ?'admin'? 。

實例命名空間

這標識了應用程序的特定實例。實例命名空間應該是完整項目唯一的。但是實例命名空間可以和應用命名空間相同。這常用來指定應用的默認實例。比如,默認Django admin 實例擁有名為?'admin'? 的實例命名空間。

被指定的命名空間 URL 使用 ?':'? 操作符。比如,使用 ?'admin:index'? 引用admin 應用的首頁。這表明命名空間為 ?'admin'? ,命名 URL 為 ?'index'? 。

命名空間也可以嵌套。命名 URL ?'sports:polls:index'? 將在命名空間 ?'polls'? 中尋找命名為 ?'index'? 的模式,該模式是在頂層命名空間 ?'sports'? 中定義的。

反向命名空間URLs

當給定一個命名空間 URL(例如 ?'polls:index'? )解析時,Django 會將完全限定的名稱拆分成多個部分,然后嘗試下面的查詢:

  • 首先,Django 查找匹配 ?application namespace? (這個例子里是 ?'polls'? )。這將產(chǎn)生應用實例列表。
  • 如果定義了當前應用程序,Django 會為這個實例查找并返回 URL 解析器。可以用 ?reverse()? 函數(shù)的 ?current_app參數(shù)來指定當前應用程序。url 模板標簽使用當前已解析的視圖命名空間當作 ?RequestContext中的應用程序。你可以通過設(shè)置在 ?request.current_app? 屬性上的當前應用來覆蓋這個默認配置。
  • 如果當前沒有應用程序,Django 會尋找默認的應用實例。默認應用程序?qū)嵗蔷哂信c實例命名空間匹配的應用程序命名空間的實例(比如, ?polls ?實例被稱為 ?'polls'? )。
  • 如果沒有默認的應用程序?qū)嵗?,Django 將會引用最后一次部署的應用程序?qū)嵗瑹o論其實例命名是什么。
  • 如果提供的命名空間無法在第一步里匹配應用程序命名空間,Django 會嘗試直接尋找命名空間來作為實例命名空間。

如果有嵌套的命名空間,則會對命名空間的每個部分重復這些步驟,直到視圖名不被解析為止,然后視圖名稱將被解析為已找到的命名空間中的一個 URL 。

例如:

為了展示這個解決策略的實際作用,請考慮教程里 ?polls應用程序的兩個實例案例:分別被稱為 ?'author-polls'? 和 ?'publisher-polls'? 。假設(shè)我們已經(jīng)增強了這個應用程序,以便會在創(chuàng)建和顯示 ?polls時考慮實例命名空間

from django.urls import include, path

urlpatterns = [
    path('author-polls/', include('polls.urls', namespace='author-polls')),
    path('publisher-polls/', include('polls.urls', namespace='publisher-polls')),
]
from django.urls import path

from . import views

app_name = 'polls'
urlpatterns = [
    path('', views.IndexView.as_view(), name='index'),
    path('/', views.DetailView.as_view(), name='detail'),
    ...
]

使用這步后,可以進行以下查找:

如果我們在實例 ?'author-polls'? 中渲染詳情頁 - ?'polls:index'? 將解析為 ?'author-polls'? 的首頁;比如下面兩種都將觸發(fā) ?"/author-polls/"? 。

在基于類的視圖里的方法:

reverse('polls:index', current_app=self.request.resolver_match.namespace)

在模板中:

{% url 'polls:index' %}

如果我們在站點某處渲染一個頁面 - ?'polls:index'? 將被解析為 ?polls的最后一個注冊實例。因為這里沒有默認實例( ?'polls'? 的實例命名空間),所以將使用 ?polls的最后一個注冊實例。這將是 ?'publisher-polls'? ,因為它是在 ?urlpatterns? 的最后面聲明的。

?'author-polls:index'? 會一直被解析為實例 ?'author-polls'? 的首頁(對于 ?'publisher-polls'? 同樣如此)。

如果還有一個默認實例 - 例如,一個叫 ?'polls'? 的實例 - 唯一的變化就是沒有當前實例(上面列表中的第二項)。在這個例子 ?'polls:index'? 將解析為默認實例的首頁而不是在 ?urlpatterns中最后聲明的實例。

URL 命名空間和包含的 URLconfs

有兩種辦法指定包含的URLconfs應用程序空間。

首先,你可以在包含的 URLcon 模塊中設(shè)置一個 ?app_name? 屬性,在相同層作為 ?urlpatterns屬性。你必須傳遞實際的模塊或?qū)υ撃K的一個字符串引用傳遞給 ?include()? ,而不是 ?urlpatterns ?本身的列表。

from django.urls import path

from . import views

app_name = 'polls'
urlpatterns = [
    path('', views.IndexView.as_view(), name='index'),
    path('/', views.DetailView.as_view(), name='detail'),
    ...
]
from django.urls import include, path

urlpatterns = [
    path('polls/', include('polls.urls')),
]

?polls.urls? 里的 URLs 定義將具有應用程序命名空間 ?polls。

其次,你可以包括一個包含嵌入式命名空間數(shù)據(jù)的對象。如果你 ?include()? 了一個 ?path()? 或 ?re_path()? 實例的列表,那個對象里包含的 URLs 將被添加到全局命名空間內(nèi)。但是,你也可以 ?include()? 一個包含以下內(nèi)容的2元組:

(, )

例如:

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

這會將指定的 URL 模式包含到給定的應用程序命名空間里。

使用 ?include()? 的 ?namespace ?參數(shù)來指定實例命名空間。如果實例命名空間沒有被指定,會默認已被導入的 URLconf 的應用程序命名空間。這意味著它也將成為那個命名空間的默認實例。


文章題目:創(chuàng)新互聯(lián)Django4.0教程:Django4.0URL調(diào)度器-URL命名空間
網(wǎng)址分享:http://www.dlmjj.cn/article/dpccipj.html