django 命名空间详解

include(module[, namespace=None, app_name=None ])
include(pattern_list)
include((pattern_list, app_namespace, instance_namespace))django

 

app_namespace即为application namespace,instance_namespace即为instance namespace app

django分为application namespaceinstance namespace 两种spa

带有命名空间的URL组成方式为”admin:index”,以 : 为分隔符,命名空间URL支持嵌套,例如:”foo:bar:whiz”io

解析命名空间URL过程:module

前提:假设有一个命名空间URL“myapp:index”被解析。渲染

1.django查找符合条件(此例中为myapp)的application namespace,会返回一个符合条件的instance namespace列表命名空间

2.若是有 current application instance被定义,换句话说就是,用于渲染的模版中的Context或者是RequestContext中的current_app这个属性被设置,则这个值就是current application instance,使用该instance命名

3.若是没有 current application instance被定义,会查找一个default application instance,这个instance namespace的名字与application namespace的名称同样。模版

4.若是没有default  application instance,则会按照声明次序,返回最后一个被声明的instance namespaceindex

5.若是第一步没有匹配条件的application namespace,django会直接去查找匹配的instance命名空间。