【问题标题】:What is the reason for specifying Django URL-Namespaces in the sites url.py?在站点 url.py 中指定 Django URL-Namespaces 的原因是什么?
【发布时间】:2015-02-06 10:16:46
【问题描述】:

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

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

之后,命名空间可以在投票应用的模板中使用。

我担心的是:为什么没有在应用程序中指定命名空间,可以重复使用并在另一个站点中获取另一个命名空间,因此模板不再起作用。我正在考虑 java 中的包或 C++ 中的命名空间,它们是在库中定义的,而不是在 using 应用程序中。

那么谁能给我解释一下,为什么要这样设计?

谢谢 汉内斯

【问题讨论】:

    标签: python django url namespaces


    【解决方案1】:

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

    此外,Django 在 urls 中有两种类型的应用程序命名空间。应用命名空间与java中的package或C++中的命名空间相同,是唯一的应用名称,可以在模板中使用。

    正如您在示例中所写,Django 还提供应用实例命名空间:

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

    在此示例中,管理应用程序可通过应用程序命名空间“admin”访问,而 polls 应用程序可通过应用程序实例命名空间“池”访问,这显然是您定义的。

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

    应用命名空间

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

    实例命名空间

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

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

    【讨论】:

      猜你喜欢
      • 2017-06-06
      • 1970-01-01
      • 2017-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多