Django 中 app_name (应用命名空间) 和 namespace (实例命名空间) 的区别
转自: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。
最新文章
- 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)
- zabbix服务器监控suse系统教程
- sql获取exec('')的返回值
- java_包含抽象方法的枚举类
- C#类方法声明where的用法
- The Child and Toy
- Xenu-web开发死链接检測工具应用
- 私有云存储搭建(owncloud)
- python发送post请求
- 数据结构系列(2)之 AVL 树
- Contest2162 - 2019-3-28 高一noip基础知识点 测试5 题解版
- 【原创】大叔问题定位分享(17)spark查orc格式数据偶尔报错NullPointerException
- 查看CPU/CACHE的拓扑结构
- CloudFlare Support - Error 522: Connection timed out 错误522:连接超时
- 如何创建 SVN 服务器,并搭建自己的 SVN 仓库
- omnet++4.0安装使用
- 软件安全攻防--缓冲区溢出和shellcode
- MySQL优化 ----开篇
- centos磁盘安装与磁盘分区方案
- opengl glEnableClientState() 和 glDisableClientState() 作用
热门文章
- mysql安装和简要操作命令+python基本操作mysql数据库
- [RK3399] 虚拟按键栏显示不全或者方向不对
- Web安全测试 — 手工安全测试方法&;修改建议
- legend3---18、第一阶段代码完成
- hadoop 2.7.3伪分布式环境运行官方wordcount
- 获取用户当前位置信息的两种方法——H5、微信
- 设备树中指定的中断触发方式与request_irq中指定的触发方式不一致时,内核会使用哪种中断触发方式呢?
- .The server quit without updating PID file (/var/lib/mysql/pc.pid).
- ORM学习笔记
- asp.net下Response.ContentType类型汇总