Подприложения и модульная структура Django - PullRequest
18 голосов
/ 11 апреля 2010

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

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

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

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

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

python manage.py reset subapp1

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

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

1 Ответ

12 голосов
/ 11 апреля 2010

Вы делаете это правильно, поскольку сам 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/

...