Перейти к содержимому

Шаблонизатор

Рендеринг шаблонов с помощью CloudyKit Jet.

ТипОписание
template.setНабор шаблонов с общей конфигурацией
template.jetОтдельный шаблон

Набор — это пространство имён для связанных шаблонов. Шаблоны внутри набора разделяют конфигурацию и могут ссылаться друг на друга по имени.

- name: views
kind: template.set

Все настройки необязательны и имеют разумные значения по умолчанию:

ПолеТипПо умолчаниюОписание
engine.development_modeboolfalseОтключить кеширование шаблонов
engine.delimiters.leftstring{{Открывающий разделитель
engine.delimiters.rightstring}}Закрывающий разделитель
engine.globalsmap-Переменные, доступные во всех шаблонах

Шаблоны принадлежат набору и идентифицируются по имени для внутреннего разрешения ссылок.

- name: layout
kind: template.jet
set: app.views:views
source: |
<html>
<body>{{ yield content() }}</body>
</html>
- name: home
kind: template.jet
set: app.views:views
source: |
{{ extends "layout" }}
{{ block content() }}
<h1>Добро пожаловать, {{ name }}</h1>
{{ end }}
ПолеТипОбязательноОписание
setreferenceДаРодительский набор шаблонов
sourcestringДаСодержимое шаблона

Шаблоны ссылаются друг на друга по именам, а не по ID реестра. Разрешение работает как виртуальная файловая система внутри набора:

  1. По умолчанию имя записи (entry.ID.Name) становится именем шаблона
  2. Переопределите через meta.name для кастомного именования:
- name: email-welcome-v2
kind: template.jet
set: app.emails:templates
meta:
name: welcome
source: |
{{ include "header" }}
Привет, {{ user }}!

Этот шаблон регистрируется как welcome в наборе, так что другие шаблоны используют {{ include "welcome" }} или {{ extends "welcome" }}.

Шаблоны могут расширять родительские и переопределять блоки:

# Родитель определяет точки вставки
- name: base
kind: template.jet
set: app.views:views
source: |
<html>
<head><title>{{ yield title() }}</title></head>
<body>{{ yield body() }}</body>
</html>
# Потомок расширяет и заполняет блоки
- name: page
kind: template.jet
set: app.views:views
source: |
{{ extends "base" }}
{{ block title() }}Моя страница{{ end }}
{{ block body() }}<p>Контент</p>{{ end }}

См. Модуль Template для операций рендеринга.