为什么需要命名空间来区分不同应用程序的模板中的标识符?

时间:2015-02-05 15:40:56

标签: django namespaces

关于Namespacing URL names的Django教程描述了主urlpatterns在为应用包含namespace时可以指定urls,例如:

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

然后命名空间用于在呈现模板时区分引用,如'polls:detail',如:

<li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>

但是,据我所知,应用程序已经根据目录位置进行了区分,就像在这种情况下“pool /”用于“pool”应用程序一样,那么为什么需要这个namespace指示,当模板是位于app目录下?

使用namespace是否意味着必须修改导入应用的模板才能匹配namespace中所选的include值?

1 个答案:

答案 0 :(得分:2)

命名空间可能很有用,然后不同的应用程序具有相同名称的网址。您如何区分detail应用中的polls应用detail来自profiles应用的polls:detail网址?使用命名空间,您可以使用profiles:detailurlpatterns = patterns('', url(r'^polls/', include('polls.urls', namespace="polls")), url(r'^other_polls/', include('polls.urls', namespace="other_polls")), ... ) 而不会发生任何冲突。

命名空间还允许您将一个应用程序附加到单个项目中的不同URL。

{{1}}