我从 Django 开始,令我困惑的是 URL 命名空间的规范。据我了解,您可以在站点项目 urls.py 中指定它们,如下所示:
urlpatterns = patterns('',
url(r'^polls/', include('polls.urls', namespace="polls")),
url(r'^admin/', include(admin.site.urls)),
)
之后,命名空间可以在民意调查应用的模板中使用。
我担心的是:为什么应用程序中没有指定 namespace ,该 namespace 可以重用并在另一个站点中获取另一个 namespace ,因此模板不再起作用。我正在考虑 java 中的包或 C++ 中的命名空间,它们是在库中定义的,而不是在使用应用程序中定义的。
有人可以向我解释一下为什么要这样设计吗?
谢谢 汉内斯
最佳答案
这种设计为您提供了更大的灵 active 。您可以在项目中使用不同的命名空间添加一个应用程序的两个实例(例如,针对不同类型的用户的两个管理面板)。
此外,Django 在 url 中为应用程序提供了两种类型的命名空间。应用程序命名空间与java中的package或C++中的命名空间相同,它是唯一的应用程序名称,您可以在模板中使用它。
以及 Django 服务应用程序实例命名空间,如您在示例中所写:
urlpatterns = patterns('',
url(r'^polls/', include('polls.urls', namespace="polls")),
url(r'^admin/', include(admin.site.urls)),
)
在此示例中,管理应用程序可通过应用程序命名空间“admin”访问,而民意调查应用程序可通过应用程序实例命名空间“pools”访问,这显然是您定义的。
您可以在文档中阅读有关命名空间的更多信息: https://docs.djangoproject.com/en/1.7/topics/http/urls/#url-namespaces
application namespace
This describes the name of the application that is being deployed. Every instance of a single application will have the same application namespace. For example, Django’s admin application has the somewhat predictable application namespace of 'admin'.
instance namespace
This identifies a specific instance of an application. Instance namespaces should be unique across your entire project. However, an instance namespace can be the same as the application namespace. This is used to specify a default instance of an application. For example, the default Django admin instance has an instance namespace of 'admin'.
Url 调度程序首先按应用程序命名空间查找,然后在尝试反转 url 时,如果没有匹配项,则按实例命名空间查找: https://docs.djangoproject.com/en/1.7/topics/http/urls/#reversing-namespaced-urls
关于python - 在站点 url.py 中指定 Django URL-Namespaces 的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28363405/