Django学习之名称空间和path
1>别名重复时反向解析的问题
如上,两个应用下面的urls配置取了相同的别名,当访问不同路径下的index,看下反向解析的结果
先不究什么访问规则、顺序啥的,别名重名的话,反向解析会找到一个与别名对应的path并返回,也就是说,
这里不管写多少不同的path,只要别名一样,那么,反向解析就只能得到一条相同的记录。
这是取名重复引发的问题,引入 名称空间来解决这个问题。
2>命名空间(英语:Namespace)
是表示标识符(别名)的可见(作用)范围。一个标识符可在多个命名空间中定义,它在不同命名空间中的
含义是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,
因为已有的定义都处于其它命名空间中。
由于name没有作用域,Django在反解URL时,会在项目全局顺序搜索,当查找到第一个name指定URL时,便立
即返回,所以,上面访问不同URL,反向解析得到相同的path
这样就指定了解析的范围,就是要在app01下面找name=index对应的path
3>django2.0版的path
- 使用尖括号(<>)从url中捕获值。
- 捕获值中可以包含一个转化器类型(converter type),比如使用 捕获一个整数变量。若果没有转化器,将匹配任何字符串,当然也包括了 / 字符。
<int:year>这种写法直接会对取值进行转换,转换成数值类型(这个int跟python内置的int方法不一样,这是django
带的转换方法),而且指明了接收参数的名称为year,所以视图函数写法如下。
除了int转换器,还有其他的,如下