Настройка проекта Django с помощью django-configurations
Я очень новичок в Django и пытаюсь создать новый проект, используя django-configurations для управления конфигурацией окружений Development, Staging и Production. https://pypi.org/project/django-configurations/
Я следовал руководству по быстрому запуску, но после настройки я продолжаю получать эту ошибку при запуске manage.py runserver
:
File "[path_redacted]/django_test/.venv/lib/python3.11/site-packages/django/apps/registry.py", line 165, in get_app_config
raise LookupError(message)
LookupError: No installed app with label 'admin'.
Это совершенно новый пустой проект, без приложений и каких-либо изменений по сравнению с настройками проекта по умолчанию. Я только настроил конфигурацию django-configurations в соответствии с руководством по быстрому запуску.
У меня manage.py
все настроено в соответствии с руководством:
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_test.settings')
os.environ.setdefault('DJANGO_CONFIGURATION', 'Development')
try:
from configurations.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()
Затем сделайте то же самое с settings.py
, добавив приведенный ниже класс сразу после стандартного определения BASE_DIR
:
class Development(Configuration):
DEBUG = True
Установленные по умолчанию приложения присутствуют и не тронуты, включая приложение администратора:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
Если я закомментирую путь к админке по умолчанию в urls.py
, то manage.py runserver
будет работать нормально, но тогда, конечно, у меня не будет доступа к странице админки.
urlpatterns = [
# path('admin/', admin.site.urls),
]
Мне кажется, что я упускаю что-то очень очевидное, но я просто не могу понять что.
Админ будет доступен после создания суперпользователя в django
На всякий случай, если кто-то столкнется с такой же проблемой, я нашел решение. Судя по краткому руководству django-configurations, вам нужно определить класс Configuration с константами, которые будут отличаться в различных окружениях, например, так:
BASE_DIR = Path(__file__).resolve().parent.parent
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
class Development(Configuration):
DEBUG = True
Однако это не сработает. Все, что находится в файле settings.py, должно быть настроено для каждого из ваших окружений. Например:
class Development(Configuration):
BASE_DIR = Path(__file__).resolve().parent.parent
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
DEBUG = TRUE
Итак, django-configurations
игнорирует настройки вне классов Configuration, поэтому приложение admin
не было в INSTALLED_APPS
, отсюда и ошибка.
Надеюсь, этот ответ поможет кому-нибудь в будущем!