繁体   English   中英

Django 2名称空间和app_name

[英]Django 2 namespace and app_name

我很难理解app_name和名称空间之间的联系。

考虑项目级别urls.py

from django.urls import path, include

urlpatterns = [
    path('blog/', include('blog.urls', namespace='blog')),
]

考虑应用程序级别(博客)urls.py

from django.urls import path
from . import views

app_name = 'blog'

urlpatterns = [
    path('', views.post_list, name='post_list'),
    path('<int:year>/<int:month>/<int:day>/<slug:post>/', views.post_detail, name='post_detail'),
]

如果我将app_name注释掉,则会得到以下结果。

'Specifying a namespace in include() without providing an app_name '
django.core.exceptions.ImproperlyConfigured: Specifying a namespace in include() without providing an app_name is not supported. Set the app_name attribute in
 the included module, or pass a 2-tuple containing the list of patterns and app_name instead.

如果我将app_name重命名为任意字符串,则不会出现错误。

app_name = 'x'

我已经阅读了文档,但是仍然没有点击。 谁能告诉我app / name和名称空间的连接方式/原因,为什么允许它们具有不同的字符串值? 手动设置app_name是否不是多余的?

尝试删除app_name ='blog'

在您的情况下,您应该使用:

'blog:post_list'

'blog:post_detail'

您还可以像这样在第一个URL中删除namespace='blog'

urlpatterns = [
path('blog/', include('blog.urls')),

]

然后您可以在模板中引用网址,而无需添加“ blog:.....”:

'post_list'
'post_detail'

尝试使用元组。

urlpatterns = [
    path('blog/', include(('blog.urls', 'blog'))),
]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM