django 命名空间详解

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

 

app_namespace即为application namespace,instance_namespace即为instance namespace

django分为application namespaceinstance namespace 两种

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

解析命名空间URL过程:

前提:假设有一个命名空间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 namespace

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

posted @ 2013-07-03 16:43  beiyeren  阅读(2316)  评论(0编辑  收藏  举报