是否可以通过提供项目名称来引用Django模板中的项目URL?

时间:2019-05-16 10:51:05

标签: python django

我有一个名为reports的Django项目,其中包含应用程序report_1report_2等。

出于某些原因,我想将该项目视为一个应用程序,因此我在reportsINSTALLED_APPS的旁边将report_1添加到了report_2,还创建了{{1 }}文件和views.py文件夹(位于templates所在的主项目文件夹中)。

settings.py中,我添加了urls.py

但是,只有在我跳过应用名称的情况下,才可以从模板中调用url:app_name = reports会抛出

  

“报告”不是注册的名称空间”

错误,但是{% url 'reports:index' %}可以工作。

为什么会这样?我以为Django遍历{% url 'index' %}中列出的所有应用,寻找INSTALLED_APPS(已提供)并将其与URL名称匹配。

2 个答案:

答案 0 :(得分:1)

app_name在根URL配置中不起作用。请参阅django-developers邮件列表上的ticket 28413this discussion

如果您确实想在report命名空间下包含一些模式,则可以包括一个2元组,其中包含url模式列表和一个命名空间。

reports_patterns = ([
    path('myurl', views.my_view, name='myview'),
], 'reports')

urlpatterns = [
    ...
    path('', include(reports_patterns)
    ...
]

然后您可以在模板中使用{% url 'reports:myview' %}

有关更多信息,请参见URL namespaces and included URLconfs上的文档

答案 1 :(得分:0)

您可以添加:

app_name = 'polls'

在urls.py上方,您正在使用哪个应用程序:

    urlpatterns=[
....
]

,然后在需要加载模板的所有地方使用:

{% url 'appname:index.html' %}