Подприложения Django и структура модуля

Я разрабатываю приложение Django, которое представляет собой большую систему, требующую нескольких подпрограмм для поддержания чистоты. Поэтому у меня есть каталог верхнего уровня, который является приложением Django (так как он имеет пустое models.py файл), и несколько подкаталогов, которые также являются приложениями сами по себе.

Причина, по которой я изложил свое приложение таким образом, заключается в том, что под-приложения разделены, но они никогда не будут использоваться сами по себе, вне родительского приложения. Поэтому нет смысла раздавать их по отдельности.

При установке моего приложения файл настроек должен включать что-то вроде этого:

INSTALLED_APPS = (
    ...
    'myapp',
    'myapp.subapp1',
    'myapp.subapp2',
    ...
)

... что явно неоптимально. Это также имеет немного неприятный результат, когда все подпрограммы именуются своим "внутренним" именем (т.е. subapp1, subapp2 так далее.). Например, если я хочу сбросить таблицы базы данных для subapp1, я должен набрать:

python manage.py reset subapp1

Это раздражает, особенно потому, что у меня есть суб-приложение под названием core - который может конфликтовать с именем другого приложения, когда мое приложение установлено в проекте пользователя.

Я делаю это совершенно неправильно, или нет, чтобы заставить эти "внутренние" приложения ссылаться на их полное имя?

1 ответ

Решение

Вы делаете это правильно, так как сам django делает это именно так. Например, приложение администратора зарегистрировано в INSTALLED_APPS как django.contrib.admin, но чтобы сбросить его, вы должны использовать manage.py reset admin, и действительно, manage.py reset django.contrib.admin не работает.

Это можно рассматривать как ошибку в Django...

Однако вас не должны беспокоить конфликты имен, потому что вы всегда должны запускать django внутри virtualenv окружение, изолированное от остальной части установки python. Это гораздо более мощное и гибкое решение, чем запуск django на обычной установке Python. Более подробная информация, например, здесь: http://mathematism.com/2009/jul/30/presentation-pip-and-virtualenv/

Другие вопросы по тегам