Подприложения 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/