转自: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。

最新文章

  1. 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)
  2. zabbix服务器监控suse系统教程
  3. sql获取exec('')的返回值
  4. java_包含抽象方法的枚举类
  5. C#类方法声明where的用法
  6. The Child and Toy
  7. Xenu-web开发死链接检測工具应用
  8. 私有云存储搭建(owncloud)
  9. python发送post请求
  10. 数据结构系列(2)之 AVL 树
  11. Contest2162 - 2019-3-28 高一noip基础知识点 测试5 题解版
  12. 【原创】大叔问题定位分享(17)spark查orc格式数据偶尔报错NullPointerException
  13. 查看CPU/CACHE的拓扑结构
  14. CloudFlare Support - Error 522: Connection timed out 错误522:连接超时
  15. 如何创建 SVN 服务器,并搭建自己的 SVN 仓库
  16. omnet++4.0安装使用
  17. 软件安全攻防--缓冲区溢出和shellcode
  18. MySQL优化 ----开篇
  19. centos磁盘安装与磁盘分区方案
  20. opengl glEnableClientState() 和 glDisableClientState() 作用

热门文章

  1. mysql安装和简要操作命令+python基本操作mysql数据库
  2. [RK3399] 虚拟按键栏显示不全或者方向不对
  3. Web安全测试 — 手工安全测试方法&修改建议
  4. legend3---18、第一阶段代码完成
  5. hadoop 2.7.3伪分布式环境运行官方wordcount
  6. 获取用户当前位置信息的两种方法——H5、微信
  7. 设备树中指定的中断触发方式与request_irq中指定的触发方式不一致时,内核会使用哪种中断触发方式呢?
  8. .The server quit without updating PID file (/var/lib/mysql/pc.pid).
  9. ORM学习笔记
  10. asp.net下Response.ContentType类型汇总