Django学习笔记九---003篇---命名空间和url的使用方式
一:namespace(命名空间)
命名空间(namespace):用来表示标识符的作用范围
一个标识符可以在多个命名空间中定义,它在不同命名空间中的含义是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突。
1.1:namespace使用原因
如果一个项目下有多个应用,例如:
项目:mysite下面有polls和text_platform两个应用。
每个应用下面都有对应urls.py文件,文件冲都有一个index/的路径,
那么,Django在反向解析路由的时候,就会出现得到不是我们想要的结果。
例如:把polls/urls.py中的index路径解析到了text_platform/urls.py中,通过views指向了我们不要的页面。访问不同URL,反向解析得到相同的path。
虽然我们定义了:name='index',但是,name是没有作用域的,
而namespace是有作用域的。我们定义namespace后,它就只能作用在该应用下面。
例如:
polls应用和text_platform应用,我们定义了namespace后,那么,就算他们下面的urls.py文件中有相同的/index/路径,那么,我们反向解析时,也不会指向同一个path,一定是指向每个index对应的path.
(同理,他们也不会与mysite项目下的urls.py文件中的index/(假如有的话)指向同一个path),
另外注意一点,namespace是与include的可选参数,就是说,当出现了,include的时候,就可以使用namespace,没有include的时候,namespace是不能使用的。
这一点与name不同,name是在path中都可以使用的。
1.2:namespace的书写格式:
path('应用名/’,include(('应用名.urls','应用名‘),namespace='应用名’) 注意()的个数,很容易少写一个()的。
例如:
参考博客:https://blog.csdn.net/J_wb49/article/details/103055521
二:路由的使用方式
在模板templates中使用路由.
以前讲templates的时候,介绍过render函数。
注意的是,render函数的参数,request,templates名称是必填参数,
context是选填参数。
后续还会继续写关于templates的博客,到时再详细介绍。
三:路由的重定向
重定向包括两种,1,路由的重定向 2,自定义视图的重定向。
其中,自定义视图的重定向又包括3、种方式,
分别是:HttpResponseRedirect, HttpResponseRedirectBase 和redirect
代表301和302
后续再详细介绍。