国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

django反向解析URL和URL命名空間的方法

2020-02-15 21:38:47
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文介紹了django反向解析URL和URL命名空間,分享給大家,具體如下:

首先明確幾個(gè)概念:

1.在html頁(yè)面上的內(nèi)容特別是向用戶展示的url地址,比如常見的超鏈接,圖片鏈接等,最好能動(dòng)態(tài)生成,而不要固定.

2.一個(gè)django項(xiàng)目中一般包含了多個(gè)django應(yīng)用(app).

3.一個(gè)視圖(view)往往對(duì)應(yīng)多個(gè)url地址.

在django中實(shí)現(xiàn)反向解析URL必備條件就是 url和view能一對(duì)一 的匹配.

(通過(guò)view找到唯一一個(gè)對(duì)應(yīng)的url,通過(guò)url也能找到唯一一個(gè)view)

最 簡(jiǎn)單的方式 就是使用 name ,可以理解為url起了一個(gè)名字.

例如:

from django.conf.urls import urlfrom . import viewsurlpatterns = [ #... url(r'^articles/([0-9]{4})/$', views.year_archive, name='news-year-archive'), #...]

此時(shí)的 news-year-archive 就可以表示 /articles/nnnn/ 在view中進(jìn)行使用.

在templates中使用

<a href="{% url 'news-year-archive' 2012 %}" rel="external nofollow" >2012 Archive</a>

在view中使用

from django.urls import reversefrom django.http import HttpResponseRedirectdef redirect_to_year(request): # ... year = 2006 # ... return HttpResponseRedirect(reverse('news-year-archive', args=(year,)))

但是使用 name 也存在一定的 問(wèn)題 ,比如在同一個(gè)項(xiàng)目中的不同的app中 name 可能會(huì)重名(導(dǎo)致反解析時(shí)一個(gè)view對(duì)應(yīng)多個(gè)url),而且給每一個(gè)url起不同名字也很繁瑣.

這時(shí)候就會(huì)用到 URL命名空間

URL命名空間包括兩個(gè)部分: app_name ( 應(yīng)用命名空間 )以及 namespace ( 實(shí)例命名空間 )

對(duì)于 app_name 官方解釋"它表示正在部署的應(yīng)用的名稱。一個(gè)應(yīng)用的每個(gè)實(shí)例具有相同的應(yīng)用命名空間。",比較好理解.

也就是說(shuō)可以通過(guò)設(shè)置 app_name 來(lái)區(qū)分不同app中同名的 name 了,使用 : 連接.

但是對(duì)于 namespace 官方解釋"它表示應(yīng)用的一個(gè)特定的實(shí)例。 實(shí)例的命名空間 在你的全部 項(xiàng)目中 應(yīng)該是 唯一 的。但是,一個(gè)實(shí)例的命名空間可以和應(yīng)用的命名空間相同。",就比較的難以理解.

namespace 主要功能為了區(qū)分同一個(gè)app下不同實(shí)例,使得反解析url時(shí)能獲得正確的結(jié)果.

例如:

在不加入 namespace 時(shí),訪問(wèn) http://127.0.0.1:8000/ccc/aaa/ 和 http://127.0.0.1:8000/bbb/aaa/

結(jié)果均為 /ccc/aaa/ ,這顯然不是我們想要獲取的結(jié)果.

# 主url.pyurlpatterns = [ ... url(r'^bbb/', include("test_namespace2.urls")), url(r'^ccc/', include("test_namespace2.urls")), ...]# test_namespace2/url.pyapp_name = "app02"urlpatterns = [ url(r'aaa/$', views.aaa, name="index"),]# test_namespace2/view.pydef aaa(request): return HttpResponse(reverse("app02:index"))            
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 大同市| 宜丰县| 绥德县| 思茅市| 江津市| 洪江市| 全州县| 怀宁县| 绍兴县| 蚌埠市| 德惠市| 洮南市| 水富县| 台南县| 临泉县| 雷波县| 靖边县| 清镇市| 鹿邑县| 麻江县| 南皮县| 合肥市| 灵山县| 若羌县| 无锡市| 瑞安市| 博白县| 梧州市| 松溪县| 双江| 宾川县| 余庆县| 威宁| 松原市| 秭归县| 尼玛县| 泰来县| 云浮市| 房山区| 那曲县| 三门县|