2017-02-11 8 views
0

Я специально использую Django и Jinja2. Это мой первый набег на использование шаблонов без помощи CMS, чтобы выбрать те из них и собрать их все вместе.Как языки или движки шаблонов, такие как DTL и Jinja, выражают и управляют отношениями между различными файлами шаблонов?

По какой-то причине я не могу понять, как сочетается куча штук.

Я чувствую себя комфортно с этими понятиями:

  • Шаблон двигателя обрабатывает шаблон и модель для получения полезного результата.
  • Файл шаблона описывает, как данные модели должны быть установлены в нем для получения этого результата.
  • Разработчик приложения программно взаимодействует с объектами движка и шаблона, которые представляют файл шаблона. Программист отвечает за выбор файла шаблона, предоставление данных и передачу всего этого движку. И затем делать что-то с полезным результатом, который возвращает двигатель.

Но что я борюсь с такой:

  • Шаблоны могут быть записаны файлы наследовать друг от друга, способствуя DRY.
  • Файлы шаблонов содержат информацию об их наследовании.

И теперь я падаю.

  1. Как это работает? Где в системе используются эти отношения?
  2. Если я передаю базовый шаблон движку, как движок знает, какие дочерние шаблоны следует использовать?
  3. Если я передаю дочерний шаблон движку, хорошо, этот шаблон содержит информацию о шаблоне, который он расширяет, но что, если родительский шаблон нуждается в более чем одном дочернем шаблоне?

Получилось ощущение, что у меня есть ошибочное понимание с большой картинкой. Может быть, я не понимаю, какие обязанности принадлежат шаблону и какие приложения?

Большое спасибо!

EDIT:

Я предполагаю, что мою первую попытку артикулировать мою проблему не работали. Вот еще один выстрел:

Some templates

Рисунок 1 показывает некоторые шаблоны у меня есть (гипотетически). Существует базовый шаблон, шаблон заголовка и два из каждого шаблона тела, боковой панели и нижнего колонтитула.

Существует дерево наследования. Каждый шаблон указывает (если возможно, в моем понимании), какой шаблон он расширяет.

И здесь проблема. Рассмотрим только шаблоны тела и нижнего колонтитула. Они расширяют базу. Но, по моему мнению, я могу выбрать только один из них для рендеринга. Если я выберу одно из тел, то я не могу выбрать, какой нижний колонтитул я хочу.Если я выберу один из нижних колонтитулов, я не могу выбрать, какое тело я хочу. Если я хочу быть в состоянии выбрать как верхний, так и нижний колонтитул, я должен написать четыре шаблона, по одному для каждой комбинации. Неужели это не так, как это работает?

Затем у нас есть боковые панели. Предположим, что я иду вперед и делаю эти четыре шаблона. Какой из этих четырех, если бы мои боковые полосы расширялись? Если я хочу иметь возможность выбрать любую боковую панель для всех четырех макетов, то теперь я должен создать восемь шаблонов! На рисунке 2 показаны различные комбинации.

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

Если это действительно так, как работают системы шаблонов, то что я должен использовать вместо этого?

ответ

0

Но это не поддерживаемые рабочие процессы. Единственный случай, который имеет смысл, - это ребенок, расширяющий родителя, и ребенок отправляется в механизм шаблона.

Любой шаблон может также включать в себя другие шаблоны напрямую, но это не является частью цепочки наследования.

+0

Ах, цепь. Поэтому я явно не могу использовать дерево шаблонов для создания страницы? Я предполагал, что должен иметь возможность указывать древовидную структуру в шаблонах. Итак, если мне нужна эта древовидная структура, я должен встроить логику представления моего приложения? – MadEmperorYuri