命名空间(app_name)和实例命名空间(namespace)

摘要:
简而言之,app_名称可以表示许多实例名称空间,具体取决于当前应用程序。如果命名空间名称和app_同名,则app_ name默认指向命名空间。

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

命名空间(app_name)和实例命名空间(namespace)第1张

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。

免责声明:文章转载自《命名空间(app_name)和实例命名空间(namespace)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SQL Server 2016 CTP2.2 的关键特性多核时代,还在使用任务管理器来看程序的性能吗?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

.net core使用Apollo做统一配置管理

做开发这么多年,经常因配置的问题引发生产环境的bug。有些年久的项目,几百个密密麻麻的配置项,经常容易搞混,有时好几个项目有好多同样的配置项,配置工作也不厌其烦。所幸,携程开源了新一代配置中心 - Apollo项目,最近在项目中使用了一段时间,感觉确实方便不少。 首先本地搭建Apollo,请参照官网资料https://github.com/ctripcor...

appium+Python真机运行测试demo的方法

appium+Python真机运行测试demo的方法 一,    打开手机的USB调试模式 二,    连接手机到电脑    将手机用数据线连接到电脑,并授权USB调试模式。查看连接的效果,在cmd下运行命令:adb devices查看UDID,如下图所示: 如果有输出,就表示连接成功。 三,    启动Appium服务 方法一:cmd命令行启动    ...

h5 plus/h5+规范使用,模块索引,教你如何去看h5+的手册

最近看了下h5+规范的官网,开始觉得晦涩难懂,确实很乱,不过这也是基于我不理解的情况,终于艰难读完了,现在来分享下心得吧,基本看完文章,按我的方法,应该可以直接上手项目。 我准备的工具 hbuilder编译器(打包用),逍遥安卓模拟器(测试安卓用)一个html 搞定,开工,为了讲解的更易于新手,咱们从简单的一个底部弹出的按钮这个demo为例子,先看下效果图...

第九章Admin后台系统

第九章 Admin后台系统 默认启用的Admin后台系统'django.contrib.admin', 创建账户密码之前,确保项目已执行数据迁移,在数据库中创建相应的数据表 中文显示后台 把该中间件位于settings.py中的第三个中间件的位置'django.middleware.locale.LocaleMiddleware', 注册模型到后台的两种方...

iOS开发者账号详细介绍

前言:   做为一个iOS应用的开发者,在编码调试过程中,可以使用模拟器来完成整个过程。但是在最后提交上线App的时候,就必须要有一个苹果开发者账号。而我作为一个近乎完全自学的iOS开发者,在开发者证书上也是绕了很多圈,迷茫迷惑。在反复摸索验证的情况下。最后看透了这一切。最初一开始是在淘宝网上购买证书的,后来在公司有了自己的个人开发者账号,在个人开发者账号...

谷歌Google Chrome浏览器打开新的标签页设置指定固定网址

谷歌Google Chrome浏览器打开新的标签页设置指定固定网址 一. 下载插件:     下载地址:https://files-cdn.cnblogs.com/files/hooly/newtabredirect.zip  二. 使用方法:   1. 首先用户点击谷歌浏览器右上角的自定义及控制按钮,在下拉框中选择设置:          2. 在打开的...