Настройка проекта 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, отсюда и ошибка. Надеюсь, этот ответ поможет кому-нибудь в будущем!

Вернуться на верх