Я специально использую Django и Jinja2. Это мой первый набег на использование шаблонов без помощи CMS, чтобы выбрать те из них и собрать их все вместе.Как языки или движки шаблонов, такие как DTL и Jinja, выражают и управляют отношениями между различными файлами шаблонов?
По какой-то причине я не могу понять, как сочетается куча штук.
Я чувствую себя комфортно с этими понятиями:
- Шаблон двигателя обрабатывает шаблон и модель для получения полезного результата.
- Файл шаблона описывает, как данные модели должны быть установлены в нем для получения этого результата.
- Разработчик приложения программно взаимодействует с объектами движка и шаблона, которые представляют файл шаблона. Программист отвечает за выбор файла шаблона, предоставление данных и передачу всего этого движку. И затем делать что-то с полезным результатом, который возвращает двигатель.
Но что я борюсь с такой:
- Шаблоны могут быть записаны файлы наследовать друг от друга, способствуя DRY.
- Файлы шаблонов содержат информацию об их наследовании.
И теперь я падаю.
- Как это работает? Где в системе используются эти отношения?
- Если я передаю базовый шаблон движку, как движок знает, какие дочерние шаблоны следует использовать?
- Если я передаю дочерний шаблон движку, хорошо, этот шаблон содержит информацию о шаблоне, который он расширяет, но что, если родительский шаблон нуждается в более чем одном дочернем шаблоне?
Получилось ощущение, что у меня есть ошибочное понимание с большой картинкой. Может быть, я не понимаю, какие обязанности принадлежат шаблону и какие приложения?
Большое спасибо!
EDIT:
Я предполагаю, что мою первую попытку артикулировать мою проблему не работали. Вот еще один выстрел:
Рисунок 1 показывает некоторые шаблоны у меня есть (гипотетически). Существует базовый шаблон, шаблон заголовка и два из каждого шаблона тела, боковой панели и нижнего колонтитула.
Существует дерево наследования. Каждый шаблон указывает (если возможно, в моем понимании), какой шаблон он расширяет.
И здесь проблема. Рассмотрим только шаблоны тела и нижнего колонтитула. Они расширяют базу. Но, по моему мнению, я могу выбрать только один из них для рендеринга. Если я выберу одно из тел, то я не могу выбрать, какой нижний колонтитул я хочу.Если я выберу один из нижних колонтитулов, я не могу выбрать, какое тело я хочу. Если я хочу быть в состоянии выбрать как верхний, так и нижний колонтитул, я должен написать четыре шаблона, по одному для каждой комбинации. Неужели это не так, как это работает?
Затем у нас есть боковые панели. Предположим, что я иду вперед и делаю эти четыре шаблона. Какой из этих четырех, если бы мои боковые полосы расширялись? Если я хочу иметь возможность выбрать любую боковую панель для всех четырех макетов, то теперь я должен создать восемь шаблонов! На рисунке 2 показаны различные комбинации.
В фактическом проекте (а не только в личном проекте, подобном тому, над которым я работаю), я ожидал бы иметь больше, чем просто эти вещи. Помимо описанных выше различных макетов, мне нужны разные блоки в боковых панелях, разные макеты в зависимости от того, вошел ли пользователь в систему или нет, всевозможные вещи. Я легко могу себе представить, что нужно написать сотни шаблонов, чтобы охватить все возможности.
Если это действительно так, как работают системы шаблонов, то что я должен использовать вместо этого?
Ах, цепь. Поэтому я явно не могу использовать дерево шаблонов для создания страницы? Я предполагал, что должен иметь возможность указывать древовидную структуру в шаблонах. Итак, если мне нужна эта древовидная структура, я должен встроить логику представления моего приложения? – MadEmperorYuri