转自:https://blog.51cto.com/jiajinh/2432449

补充理解:

先把官网上对应用命名空间(app_name)和实例命名空间(namespace)的解释贴上:

app_name(应用命名空间)通常在app.urls模块中指定,如:

app_name = "test"  //应用命名空间
urlpatterns = [
path("article1/", views.test, name="url_a"),
]

namespace(实例命名空间)通常在ROOT_URLCONF模块(根url路由模块)中指定,如下面的:namespace="test1",namespace="test2",namespace="test3"

urlpatterns = [  //属于app_name = "test"应用命名空间的三个实例命名空间
re_path(r"^test_u1/", include("test_app.urls", namespace="test1")), 
re_path(r"^test_u2/", include("test_app.urls", namespace="test2")),
re_path(r"^test_u3/", include("test_app.urls", namespace="test3")),
]

上面的urlpatterns列表中的三个url配置有不同的namespace(实例命名空间),但他们都路由到test_app.urls,且在test_app.urls中指定了app_name="test"(应用命名空间),此时,test就代表了指向了它的三个namespace之一,至于test具体代表哪个namespace,就要看当前应用(current application)是哪个,比如:

服务器收到来自 http://localhost:8000/test_u2/article1/的请求,该url匹配列表中的第二条,此时namespace="test2"的应用就称为当前应用(current application),这时候app_name="test"中的test就代表了这个当前应用对应的的实例命名空间,在模板标签{% url "test:url_a" %}中的test就代表了test2,等价于{% url "test2:url_a" %},从而反向解析出来的url为:/test_u2/article1/,如果有来自http://localhost:8000/test_u1/article1/的请求,那么namespace="test1"的应用就称为当前应用,test就代表了test1。总之,app_name可以代表许多实例命名空间,具体代表哪个,要看当前应用是哪个。

假设index.html中有模板标签{% url "test:url_a" %},而此时有来自http://localhost:8000/app01/index/ 的请求需要访问index.html,这个正在访问的url不属于上述三个namespace的任何一个,也就说是不存在当前应用,那么app_name就会默认指向urlpatterns中最后一个namespace即test3,那么index.html中的{% url "test:url_a" %}模板标签,就等价于{% url "test3:url_a" %}。如果namespace名和app_name一样,app_name就默认指向该namespace。

Django 中 app_name (应用命名空间) 和 namespace (实例命名空间) 的区别的更多相关文章

  1. django中app_name以及namespace理解

    在写django的时候,html中反向解析经常会用到app_name 但有时候又是namespace,具体的区别如下: 大部分情况 这两者有其一就可以了. 并且两者(可以简化理解)无区别 只要一种情况 ...

  2. Python()-类命名空间和对象/实例命名空间

    类命名空间和对象/实例命名空间: 创建类, 就会创建一个类的名称空间, 空间:存储类的属性 属性: 静态属性:直接定义在类下面 & 和类名关联 的变量 对象属性:在类内和self关联 & ...

  3. django中使用原生的sql查询实例

    在app文件夹下创建database_operations.py文件,写如下内容: import pymysql from 项目名.settings import DATABASES class Da ...

  4. django中的objects.get和objects.filter方法的区别

    为了说明它们两者的区别定义2个models class Student(models.Model): name = models.CharField('姓名', max_length=20, defa ...

  5. django 中namespace的问题

    在早期的django版本中 urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^polls/', include('polls.urls' ...

  6. django 中的路由系统(url)

    路由系统 根据Django约定,一个WSGI应用里最核心的部件有两个:路由表和视图.Django框架 的核心功能就是路由:根据HTTP请求中的URL,查找路由表,将HTTP请求分发到 不同的视图去处理 ...

  7. Django 中url补充以及模板继承

    Django中的URL补充 默认值 在url写路由关系的时候可以传递默认参数,如下: url(r'^index/', views.index,{"name":"root& ...

  8. Django中URL的解析和反查

    add by zhj: 如果想用reverse(namespace1:namespace2:...:namespaceN:name)反查url(注意:用reverse('polls:index')方法 ...

  9. django-URL实例命名空间(十一)

    每生成一个地址,都是一个实例.使用实例命名空间,针对于一个app而言. book/views.py from django.http import HttpResponse from django.s ...

随机推荐

  1. 2018-2019-2 网络对抗技术 20165311 Exp 9 Web安全基础

    2018-2019-2 网络对抗技术 20165311 Exp 9 Web安全基础 基础问题回答 实践过程记录 WebGoat安装 SQL注入攻击 1.命令注入(Command Injection) ...

  2. GO --- 将Reader 或者 ReadCloser 转化为 ReadSeeker

    原因: ReadSeeker 封装了Seek()方法,这个方法要求资源的任何位置都能被定位,例如存储在磁盘里文件,你可以随时读取文件的任意位置.而response.Body 是通过TCP连接从网络中读 ...

  3. openwrt环境中某个运行在host端的软件如何安装到openwrt的$(STAGING_DIR_HOST)/bin下

    可参考示例:见'git grep host-build.mk package/{system,utils}'

  4. 机器学习 - 算法示例 - Xgboost

    安装 能直接安装就再好不过 pip install xgboost 如果不能就下载之后本地安装 安装包下载地址 这里 想要啥包都有 数据集 pima-indians-diabetes.csv 文件 调 ...

  5. 123457123456#0#-----com.threeapp.magicImageShow01----儿童宝宝魔法画笔

    com.threeapp.magicImageShow01----儿童宝宝魔法画笔

  6. java springmvc 前端 跨域问题

    有个朋友在写扇贝插件的时候遇到了跨域问题.于是我对解决跨域问题的方式进行了一番探讨. 问题 API:查询单词URL: https://api.shanbay.com/bdc/search/?word= ...

  7. laravel php门面模式

    门面模式   理解3个概念: 1)Container的概念,laravel所有的服务都注册在container里面,至于如何注册,就是使用service provider   2)service pr ...

  8. excel自学笔记 from av50264533

    1.函数公式 MINUTE(serial_number)  函数解读 Serial_number 表示一个时间值,其中包含要查找的分钟  函数公式 NOW()  函数解读 显示出现在的时间 计算通话时 ...

  9. python 优雅的解析 jsonp

    一段 jsonp 格式数据 mtopjsonpweexcb1({"api":"mtop.taobao.idle.recycle.nextspunav.get", ...

  10. 帝国cms 批量替换语句

    UPDATE www_92game_net_cnys_ecms_caipu SET titlepic=REPLACE(titlepic,'http://file.92game.net', '') ; ...