在网站url.py中指定Django URL-Namespaces的原因是什么?

时间:2015-02-06 10:16:47

标签: python django url namespaces

我从Django开始,令我困惑的是URL命名空间的规范。据我所知,你在网站项目urls.py中指定它们,如下所示:

urlpatterns = patterns('',
    url(r'^polls/', include('polls.urls', namespace="polls")),
    url(r'^admin/', include(admin.site.urls)),
)

之后,命名空间可用于民意调查应用程序的模板。

我关心的是:为什么未在应用程序中指定名称空间,可以重用该名称空间并在另一个站点中获取另一个名称空间,因此该模板不再起作用。我正在考虑使用Java中的包或C ++中的命名空间,这些包在库中定义而不是在使用应用程序中。

所以有人可以向我解释,为什么这个设计就像它一样?

由于 汉纳斯

1 个答案:

答案 0 :(得分:1)

此设计为您提供更大的灵活性。您可以在项目中使用不同的命名空间添加一个应用程序的两个实例(例如,针对不同类型的用户使用两个管理面板)。

此外,Django为url中的应用程序提供了两种类型的命名空间。应用程序命名空间与Java中的包或C ++中的命名空间相同,它是唯一的应用程序名称,您可以在模板中使用它。

正如您在示例中所写的那样,Django还提供app实例名称空间:

urlpatterns = patterns('',
    url(r'^polls/', include('polls.urls', namespace="polls")),
    url(r'^admin/', include(admin.site.urls)),
)

在此示例中,管理员应用程序可以通过应用程序命名空间“管理员”访问,并且轮询应用程序可由应用程序实例名称空间“池”访问,您可以明确定义它们。

您可以在文档中阅读有关命名空间的更多信息: https://docs.djangoproject.com/en/1.7/topics/http/urls/#url-namespaces

  

应用程序命名空间

     

这描述了正在部署的应用程序的名称。   单个应用程序的每个实例都将具有相同的应用程序   命名空间。例如,Django的管理应用程序有点   可预测的应用程序命名空间' admin'。

     

实例名称空间

     

这标识了应用程序的特定实例。例   命名空间在整个项目中应该是唯一的。但是,一个   实例名称空间可以与应用程序名称空间相同。这个   用于指定应用程序的默认实例。例如,   默认的Django管理实例的实例名称空间为' admin'。

Url调度程序首先按app命名空间查找,然后在尝试反向url时,如果实例名称空间没有匹配项查找: https://docs.djangoproject.com/en/1.7/topics/http/urls/#reversing-namespaced-urls