Django之命名空间(namespace)

概念:

命名空间(namespace):用来表示标识符的作用范围

一个标识符可以在多个命名空间中定义,它在不同命名空间中的含义是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突。

应用场景:

当一个项目中包含多个app,每个app中都有命名相同的标识符时,为了能够使每次访问都能得到想要的结果(访问指定变量),就需要使用namespace。

例子:

1、创建一个名叫Test 的项目,
然后创建两个应用(并在app目录下创建一个urls.py文件)app_01,app_02。
在这里插入图片描述
2、用include 来管理Test项目URL。
Test/urls.py
在这里插入图片描述
3、定义app下的URL
app01/urls.py
在这里插入图片描述
app02/urls.py
在这里插入图片描述
4、视图函数views
app01/views.py
在这里插入图片描述
app02/views.py
在这里插入图片描述

5、启动django,浏览器访问URL结果。
在这里插入图片描述
在这里插入图片描述
显然,这并不是我们想要的结果。
原因:由于name是没有作用域的,django在反向解析URL时,会在项目全局顺序搜素,当查找到第一个name指向的URL时,便立即返回。所以,上面访问不同URL,反向解析得到相同的path。

解决办法:
使用namespace命名空间,给name设置一个作用域。。
从第二步开始,改写上面的例子。

2、用include 来管理Test项目URL,并进行namespace(命名空间)。
Test/urls.py
在这里插入图片描述
3、定义app下的URL
app_01/urls.py
在这里插入图片描述
app_02/urls.py
在这里插入图片描述
4、URL对应函数处理使用namespace 进行生成用户访问的URL
app_01/views.py
在这里插入图片描述
app_02/views.py
在这里插入图片描述
5、启动Django,浏览器访问URL结果。
访问app01/index/
在这里插入图片描述

访问app02/index/

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值