Как заставить шаблоны проектов и шаблоны Satchmo сосуществовать? - PullRequest
2 голосов
/ 12 марта 2009

Я работаю с установкой Satchmo, которая находится в существующем проекте. Этот проект имеет свои собственные шаблоны, а также шаблоны для некоторых из установленных приложений. Некоторые из этих специфичных для приложения шаблонов имеют свои собственные вариации app_base.html, которые рассчитывают получить форму base.html. Я хотел бы иметь возможность делать то же самое с моими шаблонами Satchmo и размещать их в базе моего проекта, но также добавить некоторые дополнительные html вокруг всех них.

  • / шаблоны
    • base.html
    • index.html
    • / Новости
      • news_base.html (расширяет base.html и добавляет функции шаблона для новостей)
      • index.html
      • detail.html
    • / магазин
      • base.html (переопределяя базу Сатчмо)

Эта структура работает несколько, но не так, как я ожидал. в /store/base.html (база Satchmo) я просто заменил все тестовым сообщением. Я вижу сообщение, поэтому я знаю, что satchmo загружает свою базу, а не базу сайта. Однако я больше не могу расширять базу своего проекта, так как использую:

{% extends "base.html %}

Возвращает ошибку рекурсии, поскольку сам ее вызов и последующие просто не будут работать.

{% extends "../base.html" %}

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

Ответы [ 3 ]

0 голосов
/ 28 июня 2009

В зависимости от того, как настроена структура вашего шаблона, также может быть хорошей идеей поиграть с переменной settings.TEMPLATE_LOADERS.

TEMPLATE_LOADERS По умолчанию: ( 'Django.template.loaders.filesystem.load_template_source', 'Django.template.loaders.app_directories.load_template_source') Кортеж вызываемых (в виде строк), которые знать, как импортировать шаблоны из различные источники. Посмотрите Джанго язык шаблонов: для Python программисты.

Для получения дополнительной информации о том, как это влияет на процесс загрузки шаблона: http://docs.djangoproject.com/en/dev/ref/templates/api/#loader-types

Исходя из того, как вы описываете свою проблему, кажется, что, закомментировав строку файла app_directories.load_template_source, вы сможете лучше найти способ выполнить то, что делаете.

django.template.loaders.app_directories.load_template_source Загружает шаблоны из приложений Django на файловая система. Для каждого приложения в INSTALLED_APPS, загрузчик ищет Подкаталог Шаблоны. Если каталог существует, Django ищет шаблоны там.

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

Например, для этого параметра:

INSTALLED_APPS = ('myproject.polls', 'myproject.music') ... тогда get_template ('foo.html') будет искать шаблоны в этих каталогах, в этот заказ:

/ путь / к / MyProject / опросы / шаблоны / foo.html /path/to/myproject/music/templates/foo.html Обратите внимание, что загрузчик выполняет оптимизация, когда она первая импортировано: кэширует список которых Пакеты INSTALLED_APPS имеют Подкаталог шаблонов.

Этот загрузчик включен по умолчанию.

0 голосов
/ 04 ноября 2010

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

Вы можете создать каталог "shop" в каталоге шаблонов и скопировать основной satchmo base.html в этот каталог.

Это сработало для меня.

0 голосов
/ 12 марта 2009

Хм, я не думал, что django посмотрел шаблоны относительно этого.

Вроде сумасшедший взлом, но это должно сработать:

  • /templates/store/base.html расширяется "global_base.html"
  • /templates/global_base.html расширяется "base.html"
...