Мне трудно понять связь между именем приложения и пространством имен.
рассмотрим уровень проекта 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'),
]
если я закомментирую имя_приложения, я получу следующее.
'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 не является избыточной?