Django学习之名称空间和path

1>别名重复时反向解析的问题

    Django学习之名称空间和path_第1张图片

    Django学习之名称空间和path_第2张图片Django学习之名称空间和path_第3张图片

    Django学习之名称空间和path_第4张图片Django学习之名称空间和path_第5张图片

    如上,两个应用下面的urls配置取了相同的别名,当访问不同路径下的index,看下反向解析的结果

    Django学习之名称空间和path_第6张图片Django学习之名称空间和path_第7张图片

    先不究什么访问规则、顺序啥的,别名重名的话,反向解析会找到一个与别名对应的path并返回,也就是说,

    这里不管写多少不同的path,只要别名一样,那么,反向解析就只能得到一条相同的记录。

    这是取名重复引发的问题,引入 名称空间来解决这个问题。

2>命名空间(英语:Namespace)

    是表示标识符(别名)的可见(作用)范围。一个标识符可在多个命名空间中定义,它在不同命名空间中的

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

    因为已有的定义都处于其它命名空间中。 

    由于name没有作用域,Django在反解URL时,会在项目全局顺序搜索,当查找到第一个name指定URL时,便立

    即返回,所以,上面访问不同URL,反向解析得到相同的path

    Django学习之名称空间和path_第8张图片

    Django学习之名称空间和path_第9张图片

    这样就指定了解析的范围,就是要在app01下面找name=index对应的path

    Django学习之名称空间和path_第10张图片Django学习之名称空间和path_第11张图片

3>django2.0版的path

  1. 使用尖括号(<>)从url中捕获值。
  2. 捕获值中可以包含一个转化器类型(converter type),比如使用 捕获一个整数变量。若果没有转化器,将匹配任何字符串,当然也包括了 / 字符。

    Django学习之名称空间和path_第12张图片

    这种写法直接会对取值进行转换,转换成数值类型(这个int跟python内置的int方法不一样,这是django

    带的转换方法),而且指明了接收参数的名称为year,所以视图函数写法如下。

    Django学习之名称空间和path_第13张图片    

    Django学习之名称空间和path_第14张图片

    除了int转换器,还有其他的,如下

    Django学习之名称空间和path_第15张图片

你可能感兴趣的:(python学习)