Под-приложения Django и структура модуля
Я разрабатываю приложение Django, которое представляет собой большую систему, которая требует, чтобы несколько под-приложений сохраняли чистоту. Поэтому у меня есть каталог верхнего уровня, который является приложением Django (поскольку он имеет пустой файл models.py
) и несколько подкаталогов, которые также являются приложениями сами по себе.
Причина, по которой я выложил приложение таким образом, заключается в том, что суб-приложения разделены, но они никогда не будут использоваться самостоятельно, вне родительского приложения. Поэтому нет смысла распространять их отдельно.
При установке моего приложения файл настроек должен содержать следующее:
INSTALLED_APPS = (
...
'myapp',
'myapp.subapp1',
'myapp.subapp2',
...
)
... который явно субоптимален. Это также имеет слегка неприятный результат, требуя, чтобы все подзапросы ссылались на их "внутреннее" имя (т.е. subapp1
, subapp2
и т.д.). Например, если я хочу reset таблицы базы данных для subapp1, я должен ввести:
python manage.py reset subapp1
Это раздражает, особенно потому, что у меня есть суб-приложение под названием core
- которое может конфликтовать с другим именем приложения, когда мое приложение установлено в пользовательском проекте.
Неужели я делаю это совершенно неправильно или не могу заставить эти "внутренние" приложения ссылаться на их полное имя?
Ответы
Ответ 1
Вы делаете это правильно, так как сам django делает это именно так. Например, приложение администратора зарегистрировано в INSTALLED_APPS
как django.contrib.admin
, но для reset оно должно использоваться 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/