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

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

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

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

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

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

python manage.py reset subapp1

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

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

18
задан Rob Golding 11 April 2010 в 15:26
поделиться

1 ответ

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

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

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

12
ответ дан 30 November 2019 в 09:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: