интеграция сторонних приложений и шаблонов django - PullRequest
3 голосов
/ 25 февраля 2012

Я новичок в Django и довольно озадачен тем, как лучше интегрировать сторонние приложения. В моей (возможно, наивной) интерпретации DRY я хочу свести к минимуму копирование / вставку не только своего собственного кода, но и кода других людей, поэтому я доволен, например, шаблоном использования contrib.auth в основном как черного цвета. поле, если мне нужна дополнительная информация об auth.User (путем расширения auth.User с помощью объекта UserProfile или наследования). Именно так я и предполагал, что буду использовать большинство сторонних приложений.

Тем не менее, я быстро обнаружил, что это было очень сложно, и теперь я смирился с тем, что в папке моего проекта есть «копии» всех моих сторонних приложений, которые в основном представляют собой целые копии с минимальными изменениями. Последней каплей было то, что я хотел добавить базовый блог (я остановился на django-basic-blog) и мне нужно было просто изменить один шаблон, и я подумал, что нет лучшего решения, чем просто сделать копию этого приложения внутри моего проекта с помощью один шаблон изменился.

Мои вопросы:

  • В этом конкретном случае, когда мне нужно изменить только один шаблон, это (скопировать все приложение) лучше всего я могу сделать? Если мне просто нужно изменить одну модель, я могу сохранить стороннее приложение без изменений и выполнить наследование модели в своем собственном приложении ...
  • В общем, эта практика копирования приложений под мой проект и внесения исправлений в каждый кусочек кажется безумно расточительной и грязной. Мне также кажется, что, если я использую часто обновляемое стороннее приложение, будет сложно синхронизировать изменения. Должен ли я просто научиться любить бомбу или мне не хватает какой-то очевидной архитектурной схемы / помощи, предоставляемой Django?

1 Ответ

5 голосов
/ 25 февраля 2012

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

Однако для шаблонов необходим другой подход, поскольку их часто приходится модифицировать для каждого проекта. Вот почему Django поставляется с settings.TEMPLATE_DIRS и settings.TEMPLATE_LOADERS.

TEMPLATE_DIRS указывает список каталогов, содержащих файлы шаблонов. TEMPLATE_LOADERS определяет классы, используемые для загрузки шаблонов. Загрузчики будут использоваться в том порядке, в котором они были определены, а каталоги будут просматриваться в порядке их определения. Таким образом, вы можете сначала искать шаблоны в каталоге вашего проекта и в других модулях в качестве запасного варианта.

Таким образом, вам не нужно копировать весь модуль python, чтобы изменить один шаблон. Скопируйте только каталог шаблонов этого стороннего модуля или даже единственный шаблон, который вы хотите изменить. Если вы поставите правильное место и добавите, укажите путь в TEMPLATE_DIR Django будет использовать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...