У меня есть демонстрационный проект Django, созданный с помощью Django 2.2. Структура выглядит следующим образом:
my_project/
├── db.sqlite3
├── my_app
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── models.py
│ ├── urls.py
│ └── views.py
├── manage.py
├── my_project
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── requirements.txt
Это началось с крошечной проблемы: «my_app» отображался в админке Django как «MY_APP» (с подчеркиванием). В Django docs говорится, что вы можете сделать это красивее, определив пользовательскую конфигурацию приложения, которая подклассов "django.apps.AppConfig", и что обычно этот подкласс будет определен в (на моем примере) "my_app / apps.py». Фактически, использование manage.py startapp my_app
даже генерирует это для вас:
# my_app/apps.py
from django.apps import AppConfig
class MyAppConfig(AppConfig):
name = 'my_app'
В документах также сказано «поставить пунктирный путь к этому подклассу в INSTALLED_APPS». Другой подход состоит в том, чтобы установить переменную default_app_config
в вашем приложении "__init__.py", но "Новые приложения должны избегать default_app_config. Вместо этого они должны требовать, чтобы точечный путь к соответствующему подклассу AppConfig был явно настроен в INSTALLED_APPS."
Однако, если я добавлю путь к конфигурации пользовательского приложения в INSTALLED_APPS
следующим образом:
# settings.py
...
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'my_app',
'my_app.apps.MyAppConfig'
]
...
, проект сразу завершится с ошибкой «LookupError: Нет установленного приложения с меткой« admin ». "
Ошибка восходит к ссылке на admin.site.urls
в корне проекта" urls.py "(строка 6 ниже):
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('my_app/', include('my_app.urls', namespace='my_app'))
]
В заключение добавляем путь кМодуль "apps", созданный "startapp" - даже без внесения каких-либо изменений в этот модуль - вылетает из проекта. OTOH, если я пойду против совета документации и определю default_app_config
в "my_app / init .py", , что работает.
Это кажется очень простым,но поиск в Google это ничего не дает, что обычно означает, что я делаю фундаментальную ошибку, которую не осознаю. Любые идеи, кто-нибудь?