Skip to content

Класс ViewRenderer

Рендеринг HTML через шаблонизатор JinjOS.

Ключевой сценарий htmx: один обработчик отвечает фрагментом на hx-запрос и целой страницей на обычный переход по ссылке.

bsl
Отображения = View.СоздатьОтображения("шаблоны", Новый Структура("Макет", "макет"));
// то же самое напрямую
Отображения = Новый ViewRenderer("шаблоны", Новый Структура("Макет", "макет"));

Конструктор

bsl
Новый ViewRenderer(Знач Каталог, Знач Параметры = Неопределено)
ПараметрТипОписание
КаталогСтрокаКаталог с файлами шаблонов. Пустое значение даёт исключение
ПараметрыСтруктура, СоответствиеНастройки

Настройки:

ПараметрПо умолчаниюОписание
КэшироватьШаблоныИстинаХранить скомпилированные шаблоны в памяти
Расширение".html"Дописывается к имени шаблона без расширения
Макет""Макет по умолчанию для метода Страница
ПлейсхолдерКонтента"@Контент"Место вставки содержимого в макет, та же метка, что использует winow
ПутьКJinjOS-Путь к файлу src/Классы/Шаблон.os пакета JinjOS, если он установлен нестандартно

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

Свойства

СвойствоТипОписание
КаталогШаблоновСтрокаПолный путь к каталогу шаблонов
МакетПоУмолчаниюСтрокаМакет, применяемый методом Страница без явного указания

Синтаксис шаблонов

{{ Модель.Поле }} подставляет значение, {% ... %} вставляет код OneScript.

html
<ul id="задачи">
{% Для Каждого Задача Из Модель.Задачи Цикл %}
	<li>{{ Задача.Название }}</li>
{% КонецЦикла; %}
</ul>

Разбор JinjOS строже, чем кажется: внутри {% %} операторы завершаются точкой с запятой ({% КонецЦикла; %}), выражение в {{ }} не может содержать закрывающую фигурную скобку, а блок {% %} - знак процента. Моделью может быть Структура, Соответствие или любой объект с полями.

Методы

МетодВозвращаетНазначение
ОтрендеритьСтрокаБазовый метод: шаблон плюс модель
ФрагментСтрокаЧасть страницы для htmx
СтраницаСтрокаШаблон, вставленный в макет
ОтрендеритьТекстСтрокаШаблон, заданный строкой
СуществуетБулевоПроверка наличия файла шаблона
ПутьШаблонаСтрокаПолный путь к файлу шаблона
ОчиститьКэш-Сброс скомпилированных шаблонов

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

Отрендерить

bsl
Функция Отрендерить(Знач ИмяШаблона, Знач Модель = Неопределено) Экспорт

Формирует шаблон с моделью. Базовый метод: Фрагмент и Страница построены на нём.

Параметры

ПараметрТипОписание
ИмяШаблонаСтрокаИмя файла шаблона относительно каталога шаблонов
МодельСтруктура, Соответствие, ПроизвольныйДанные шаблона, доступные как Модель

Возвращаемое значение: Строка - готовая разметка.

bsl
Разметка = Отображения.Отрендерить("задачи/строка", Новый Структура("Название", "Купить хлеб"));

Модель Неопределено заменяется пустой структурой: сообщение об отсутствующем поле понятнее, чем «значение не является значением объектного типа».

Фрагмент

bsl
Функция Фрагмент(Знач ИмяШаблона, Знач Модель = Неопределено) Экспорт

Формирует фрагмент разметки - часть страницы, которую htmx подставит в целевой элемент. Отличается от Отрендерить только названием, читаемым в коде обработчика htmx: фрагмент возвращается без макета.

Параметры: те же, что у Отрендерить.

Возвращаемое значение: Строка - разметка фрагмента.

bsl
Ответ.ТелоТекст = Отображения.Фрагмент("задачи/строка", Задача);

Страница

bsl
Функция Страница(Знач ИмяШаблона, Знач Модель = Неопределено, Знач Макет = Неопределено) Экспорт

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

Параметры

ПараметрТипОписание
ИмяШаблонаСтрокаИмя файла шаблона с содержимым
МодельСтруктура, Соответствие, ПроизвольныйДанные шаблона
МакетСтрокаИмя файла макета. Неопределено - макет по умолчанию

Возвращаемое значение: Строка - разметка страницы. Без макета совпадает с фрагментом.

Макет без плейсхолдера даёт исключение: страница без содержимого - почти наверняка ошибка в шаблоне.

bsl
Ответ.ТелоТекст = Отображения.Страница("задачи/список", Модель);
Ответ.ТелоТекст = Отображения.Страница("задачи/список", Модель, "макет-печати");

ОтрендеритьТекст

bsl
Функция ОтрендеритьТекст(Знач ТекстШаблона, Знач Модель = Неопределено) Экспорт

Формирует шаблон, заданный текстом, минуя файлы и кэш. Полезно для писем и коротких вставок, которые незачем выносить в отдельный файл.

Параметры

ПараметрТипОписание
ТекстШаблонаСтрокаРазметка с подстановками
МодельСтруктура, Соответствие, ПроизвольныйДанные шаблона

Возвращаемое значение: Строка - готовая разметка.

bsl
Сообщить(Отображения.ОтрендеритьТекст("<b>{{ Модель.Имя }}</b>", Новый Структура("Имя", "Пётр")));

Существует

bsl
Функция Существует(Знач ИмяШаблона) Экспорт

Параметры: ИмяШаблона - Строка имя файла шаблона.

Возвращаемое значение: Булево - Истина, если шаблон найден.

bsl
Если Отображения.Существует("задачи/карточка") Тогда
	Ответ.ТелоТекст = Отображения.Фрагмент("задачи/карточка", Задача);
КонецЕсли;

ПутьШаблона

bsl
Функция ПутьШаблона(Знач ИмяШаблона) Экспорт

Возвращает полный путь к файлу шаблона - тот, по которому шаблон будет прочитан. Расширение по умолчанию дописывается здесь же.

Параметры: ИмяШаблона - Строка имя файла шаблона, расширение можно опустить.

Возвращаемое значение: Строка - полный путь к файлу.

bsl
Сообщить(Отображения.ПутьШаблона("задачи/строка"));  // C:\app\шаблоны\задачи\строка.html

ОчиститьКэш

bsl
Процедура ОчиститьКэш() Экспорт

Забывает скомпилированные шаблоны. Нужно, если файлы изменились, а кэширование включено.

bsl
Отображения.ОчиститьКэш();

Сообщения об ошибках

СитуацияСообщение
Шаблон не найденwinow-view: шаблон задачи/строка не найден, искали файл C:\app\шаблоны\задачи\строка.html
Недопустимое имяwinow-view: недопустимое имя шаблона ../../packagedef
Макет без плейсхолдераwinow-view: макет макет не содержит плейсхолдер @Контент
Ошибка внутри шаблонаwinow-view: ошибка формирования шаблона задачи/строка: ...

Сообщение об отсутствующем шаблоне называет и имя, и путь: чаще всего расходятся именно они.

Смотри также