由于name没有作用域,Django在反解URL时,会在项目全局顺序搜索,当查找到第一个name指定URL时,立即返回。

project/urls.py

urlpatterns = [
path('admin/', admin.site.urls),
path('app/', include('app.urls')),
path('app2/', include('app2.urls')),
path('app3/', include('app3.urls')),
]

app/urls.py

urlpatterns = [
path('index/', views.index, name='index'),
]

app2/urls.py

urlpatterns = [
path('index/', views.index, name='index'),
]

app3/urls.py

urlpatterns = [
path('index/', views.index, name='index'),
]

在各自的函数中同时反解url

# app/views
def index(request):
return HttpResponse(reverse('index')) # app2/views
def index(request):
return HttpResponse(reverse('index')) # app3/views
def index(request):
return HttpResponse(reverse('index'))

执行结果

http://127.0.0.1:8000/app/index/
/app3/index/ http://127.0.0.1:8000/app2/index/
/app3/index/ http://127.0.0.1:8000/app3/index/
/app3/index/

可以看到,当在不同的app的urls中定义相同的name时,最后反解出来的都是最后定义的一个URL,为了避免这种情况,Django引入了名称空间。

Django 2版本

project/urls.py

urlpatterns = [
path('admin/', admin.site.urls),
path('app/', include(('app.urls', 'app'))), # include传入一个元组,第二个元素是app的名字
path('app2/', include(('app2.urls', 'app2'))),
path('app3/', include(('app3.urls', 'app3'))),
]

app/urls.py

urlpatterns = [
path('index/', views.index, name='index'),
]

app2/urls.py

urlpatterns = [
path('index/', views.index, name='index'),
]

app3/urls.py

urlpatterns = [
path('index/', views.index, name='index'),
]

在各自的函数中同时反解url

# app/views
def index(request):
return HttpResponse(reverse('app:index')) # app2/views
def index(request):
return HttpResponse(reverse('app2:index')) # app3/views
def index(request):
return HttpResponse(reverse('app3:index'))

运行结果

http://127.0.0.1:8000/app/index/
/app/index/ http://127.0.0.1:8000/app2/index/
/app2/index/ http://127.0.0.1:8000/app3/index/
/app3/index/

成功地避免反解出错的问题

Django之名称空间的更多相关文章

  1. $Django 路由层(有,无名分组、反向解析、总路由分发、名称空间、伪静态)

    1 简单配置 -第一个参数是正则表达式(如果要精准匹配:'^publish/$')  -第二个参数是视图函数(不要加括号)  -url(r'^admin/', admin.site.urls), 注: ...

  2. Django url反向解析与路由分发名称空间

    url反向解析 url.py from django.conf.urls import url from django.contrib import admin from app01 import v ...

  3. Django框架(四)-- 路由控制:有名/无名分组、反向解析、路由分发、名称空间、伪静态、APPEND_SLASH、不同版本的Django区别、Django虚拟环境搭建

    路由控制 一.简单路由配置 url(r'^booklist$', views.booklist) 第一个参数是正则表达式,第二个参数是视图函数 每个正则表达式前面的'r' 是可选的但是建议加上.它告诉 ...

  4. Django框架之第三篇(路由层)--有名/无名分组、反向解析、路由分发、名称空间、伪静态

    一.Django请求生命周期 二.路由层  urls.py url()方法 第一个参数其实就是一个正则表达式,一旦前面的正则匹配到了内容,就不会再往下继续匹配,而是直接执行对应的视图函数. djang ...

  5. Django框架(四)—— 路由控制:有名/无名分组、反向解析、路由分发、名称空间、伪静态、APPEND_SLASH、不同版本的Django区别

    目录 路由控制 一.简单路由配置 二.无名分组 三.有名分组 四.反向解析 五.路由分发 六.名称空间(一般不使用) 七.伪静态 八.Django 2.x和Django 1.x 路由层区别 九.APP ...

  6. Django的路由分发与名称空间

    路由分发 django每一个app下面都可以有自己的urls.py路由层,templates文件夹,static文件夹 项目名下urls.py(总路由)不再做路由与视图函数的匹配关系而是做路由的分发 ...

  7. [Django框架之路由层匹配、有名 无名分组、反向解析、路由分发、名称空间、伪静态、本地虚拟环境、django版本区别]

    [Django框架之路由层匹配.有名 无名分组.反向解析.路由分发.名称空间.伪静态.本地虚拟环境.django版本区别] 路由层 路由即请求地址与视图函数的映射关系,如果把网站比喻成一本书,那路由就 ...

  8. Django框架路由分发-名称空间

    目录 一:路由分发 1.路由分发简介 2.总路由分发配置 3.总路由终极配置(不需要导应用路由,直接点应用即可) 4.子路由配置 二:名称空间 1.名称空间应用场景 3.解决方式二>>&g ...

  9. django路由匹配、反向解析、无名有名反向解析、路由分发、名称空间

    目录 django请求生命周期流程图 1.Django请求的生命周期的含义 2.Django请求的生命周期图解及流程 3.Django的请求生命周期(分布解析) 路由层 1.路由匹配 2.path转换 ...

随机推荐

  1. MongoDB 数据恢复与导出

    MongoDB登录mongo --host localhost --port 27017 -uroot -pdbpasswd --authenticationDatabase admin查看所有dbs ...

  2. 自学华为IoT物联网_06 智慧家庭物联网常见问题及解决方案

    点击返回自学华为IoT物流网 自学华为IoT物联网_06 智慧家庭物联网常见问题及解决方案 1. 家庭中遇到的问题 2.1 华为智慧家庭概念的发展历程 2.2 华为智慧家庭的解决方案架构 智慧家庭主要 ...

  3. 【BZOJ2817】[ZJOI2012]波浪(动态规划)

    [BZOJ2817][ZJOI2012]波浪(动态规划) 题面 BZOJ 洛谷 题解 首先这个差值最大也就是\(n^2\)级别的. 那么这样子就可以压进状态啦. 我们把这个操作看成一个个加数的操作,按 ...

  4. Luogu P5285 / LOJ3050 【[十二省联考2019]骗分过样例】

    伪提答害死人...(出题人赶快出来挨打!!!) 虽说是考场上全看出来是让干嘛了,然而由于太菜以及不会打表所以GG了,只拿了\(39\)... 经测试,截至\(2019.4.18-11:33\),这份接 ...

  5. 「SCOI2014」方伯伯的商场之旅 解题报告

    「SCOI2014」方伯伯的商场之旅 我一开始的想法会被两个相同的集合位置去重给搞死,不过应该还是可以写的,讨论起来老麻烦. 可以先钦定在\(1\)号点集合,然后往后调整一部分. 具体一点,通过前缀和 ...

  6. luogu3621 城池攻占 (倍增)

    好像所有人都写的左偏树 但我不会啊233 首先发现乘的时候 系数不会为负,所以能得到一个关键条件:变化后的战斗力随变化前的战斗力大小单调 所以我们考虑倍增 设hp[x][i]是从x开始一路攻克$2^i ...

  7. Vim常用插件安装及配置方法

    Vundle 安装 git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim 配置 vimrc首部添 ...

  8. Windows android SDK环境配置及判断安装成功

  9. Python线程状态和全局解释器锁

    在刚接触Python的时候时常听到GIL这个词,并且发现这个词经常和Python无法高效的实现多线程划上等号.本着不光要知其然,还要知其所以然的研究态度,博主搜集了各方面的资料,花了一周内几个小时的闲 ...

  10. bash 5

    1)bash支持一维数组(不支持多维数组),并且没有限定数组的大小. 类似于 C 语言,数组元素的下标由 0 开始编号.获取数组中的元素要 利用下标,下标可以是整数或算术表达式,其值应大于或等于 0. ...