概念:
命名空间(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/