Класс ViewRenderer
Рендеринг HTML через шаблонизатор JinjOS.
Ключевой сценарий htmx: один обработчик отвечает фрагментом на hx-запрос и целой страницей на обычный переход по ссылке.
Отображения = View.СоздатьОтображения("шаблоны", Новый Структура("Макет", "макет"));
// то же самое напрямую
Отображения = Новый ViewRenderer("шаблоны", Новый Структура("Макет", "макет"));Конструктор
Новый ViewRenderer(Знач Каталог, Знач Параметры = Неопределено)| Параметр | Тип | Описание |
|---|---|---|
Каталог | Строка | Каталог с файлами шаблонов. Пустое значение даёт исключение |
Параметры | Структура, Соответствие | Настройки |
Настройки:
| Параметр | По умолчанию | Описание |
|---|---|---|
КэшироватьШаблоны | Истина | Хранить скомпилированные шаблоны в памяти |
Расширение | ".html" | Дописывается к имени шаблона без расширения |
Макет | "" | Макет по умолчанию для метода Страница |
ПлейсхолдерКонтента | "@Контент" | Место вставки содержимого в макет, та же метка, что использует winow |
ПутьКJinjOS | - | Путь к файлу src/Классы/Шаблон.os пакета JinjOS, если он установлен нестандартно |
На время разработки кэш выключают, чтобы правки шаблонов подхватывались без перезапуска сервера.
Свойства
| Свойство | Тип | Описание |
|---|---|---|
КаталогШаблонов | Строка | Полный путь к каталогу шаблонов |
МакетПоУмолчанию | Строка | Макет, применяемый методом Страница без явного указания |
Синтаксис шаблонов
{{ Модель.Поле }} подставляет значение, {% ... %} вставляет код OneScript.
<ul id="задачи">
{% Для Каждого Задача Из Модель.Задачи Цикл %}
<li>{{ Задача.Название }}</li>
{% КонецЦикла; %}
</ul>Разбор JinjOS строже, чем кажется: внутри {% %} операторы завершаются точкой с запятой ({% КонецЦикла; %}), выражение в {{ }} не может содержать закрывающую фигурную скобку, а блок {% %} - знак процента. Моделью может быть Структура, Соответствие или любой объект с полями.
Методы
| Метод | Возвращает | Назначение |
|---|---|---|
Отрендерить | Строка | Базовый метод: шаблон плюс модель |
Фрагмент | Строка | Часть страницы для htmx |
Страница | Строка | Шаблон, вставленный в макет |
ОтрендеритьТекст | Строка | Шаблон, заданный строкой |
Существует | Булево | Проверка наличия файла шаблона |
ПутьШаблона | Строка | Полный путь к файлу шаблона |
ОчиститьКэш | - | Сброс скомпилированных шаблонов |
Имя шаблона задаётся относительно каталога шаблонов, расширение можно опустить, подкаталоги разрешены. Имена с .., двоеточием и ведущим слешем отвергаются: имя шаблона нередко приходит из запроса, а через него нельзя давать читать произвольный файл на диске.
Отрендерить
Функция Отрендерить(Знач ИмяШаблона, Знач Модель = Неопределено) ЭкспортФормирует шаблон с моделью. Базовый метод: Фрагмент и Страница построены на нём.
Параметры
| Параметр | Тип | Описание |
|---|---|---|
ИмяШаблона | Строка | Имя файла шаблона относительно каталога шаблонов |
Модель | Структура, Соответствие, Произвольный | Данные шаблона, доступные как Модель |
Возвращаемое значение: Строка - готовая разметка.
Разметка = Отображения.Отрендерить("задачи/строка", Новый Структура("Название", "Купить хлеб"));Модель Неопределено заменяется пустой структурой: сообщение об отсутствующем поле понятнее, чем «значение не является значением объектного типа».
Фрагмент
Функция Фрагмент(Знач ИмяШаблона, Знач Модель = Неопределено) ЭкспортФормирует фрагмент разметки - часть страницы, которую htmx подставит в целевой элемент. Отличается от Отрендерить только названием, читаемым в коде обработчика htmx: фрагмент возвращается без макета.
Параметры: те же, что у Отрендерить.
Возвращаемое значение: Строка - разметка фрагмента.
Ответ.ТелоТекст = Отображения.Фрагмент("задачи/строка", Задача);Страница
Функция Страница(Знач ИмяШаблона, Знач Модель = Неопределено, Знач Макет = Неопределено) ЭкспортФормирует полную страницу: шаблон вставляется в макет на место плейсхолдера. Макет получает ту же модель, поэтому в нём доступны, например, заголовок страницы и данные пользователя.
Параметры
| Параметр | Тип | Описание |
|---|---|---|
ИмяШаблона | Строка | Имя файла шаблона с содержимым |
Модель | Структура, Соответствие, Произвольный | Данные шаблона |
Макет | Строка | Имя файла макета. Неопределено - макет по умолчанию |
Возвращаемое значение: Строка - разметка страницы. Без макета совпадает с фрагментом.
Макет без плейсхолдера даёт исключение: страница без содержимого - почти наверняка ошибка в шаблоне.
Ответ.ТелоТекст = Отображения.Страница("задачи/список", Модель);
Ответ.ТелоТекст = Отображения.Страница("задачи/список", Модель, "макет-печати");ОтрендеритьТекст
Функция ОтрендеритьТекст(Знач ТекстШаблона, Знач Модель = Неопределено) ЭкспортФормирует шаблон, заданный текстом, минуя файлы и кэш. Полезно для писем и коротких вставок, которые незачем выносить в отдельный файл.
Параметры
| Параметр | Тип | Описание |
|---|---|---|
ТекстШаблона | Строка | Разметка с подстановками |
Модель | Структура, Соответствие, Произвольный | Данные шаблона |
Возвращаемое значение: Строка - готовая разметка.
Сообщить(Отображения.ОтрендеритьТекст("<b>{{ Модель.Имя }}</b>", Новый Структура("Имя", "Пётр")));Существует
Функция Существует(Знач ИмяШаблона) ЭкспортПараметры: ИмяШаблона - Строка имя файла шаблона.
Возвращаемое значение: Булево - Истина, если шаблон найден.
Если Отображения.Существует("задачи/карточка") Тогда
Ответ.ТелоТекст = Отображения.Фрагмент("задачи/карточка", Задача);
КонецЕсли;ПутьШаблона
Функция ПутьШаблона(Знач ИмяШаблона) ЭкспортВозвращает полный путь к файлу шаблона - тот, по которому шаблон будет прочитан. Расширение по умолчанию дописывается здесь же.
Параметры: ИмяШаблона - Строка имя файла шаблона, расширение можно опустить.
Возвращаемое значение: Строка - полный путь к файлу.
Сообщить(Отображения.ПутьШаблона("задачи/строка")); // C:\app\шаблоны\задачи\строка.htmlОчиститьКэш
Процедура ОчиститьКэш() ЭкспортЗабывает скомпилированные шаблоны. Нужно, если файлы изменились, а кэширование включено.
Отображения.ОчиститьКэш();Сообщения об ошибках
| Ситуация | Сообщение |
|---|---|
| Шаблон не найден | winow-view: шаблон задачи/строка не найден, искали файл C:\app\шаблоны\задачи\строка.html |
| Недопустимое имя | winow-view: недопустимое имя шаблона ../../packagedef |
| Макет без плейсхолдера | winow-view: макет макет не содержит плейсхолдер @Контент |
| Ошибка внутри шаблона | winow-view: ошибка формирования шаблона задачи/строка: ... |
Сообщение об отсутствующем шаблоне называет и имя, и путь: чаще всего расходятся именно они.
