我有一个名为reports
的Django项目,其中包含应用程序report_1
,report_2
等。
出于某些原因,我想将该项目视为一个应用程序,因此我在reports
和INSTALLED_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名称匹配。
答案 0 :(得分:1)
app_name
在根URL配置中不起作用。请参阅django-developers邮件列表上的ticket 28413和this 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' %}