由于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. Haproxy 优化

    Haproxy 自身健康检查vi /usr/local/haproxy/sbin/check_haproxy.sh #!/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/b ...

  2. Nagios 使用 NSClient++ 监控Windows Server

    在被监控的Windows server 主机上安装NSClinet++下载地址:https://www.nsclient.org/download/32bit:http://files.nsclien ...

  3. Codeforces Bubble Cup 11 J. Moonwalk challenge加强版

    题意 有一棵 \(n\) 个节点的树,每条边上有一个字符,有 \(m\) 次询问. 每次会选定两个点 \(u, v\) , \(u\) 到 \(v\) 的路径上的字符形成了一个字符串 \(T\) ,再 ...

  4. 【CF487E】Tourists(圆方树)

    [CF487E]Tourists(圆方树) 题面 UOJ 题解 首先我们不考虑修改,再来想想这道题目. 我们既然要求的是最小值,那么,在经过一个点双的时候,走的一定是具有较小权值的那一侧. 所以说,我 ...

  5. html图像、绝对路径和相对路径,链接

    html图像 <img>标签可以在网页上插入一张图片,它是独立使用的标签,通过"src"属性定义图片的地址,通过"alt"属性定义图片加载失败时显示 ...

  6. centos7安装sonarqube6.7 代码质量管理平台

    应用介绍:SonarQube是一个用于代码质量管理的开源平台,用于管理源代码的质量通过插件形式:    可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groov ...

  7. javascript正则表达式---正向预查

    什么是正向预查?这里有腾讯招聘的一个例子: 如何给一串数字用千分制表示?比如9999999999变成9,999,999,999.这样一个问题你会怎么答呢?博主js正则学的不咋样,然后用操作字符串的办法 ...

  8. ftp sun jdk自带

    package com.italktv.colnv.stat.util; import java.io.File; import java.io.FileInputStream; import jav ...

  9. Unicode 与 Unicode Transformation Format(UTF-8 / UTF-16 / UTF-32)

    ASCII(American Standard Code for Information Interchange):早期它使用7 bits来表示一个字符,总共表示27 = 128个字符:后来扩展到8 ...

  10. HDU3974 Assign the task

    Assign the task Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...