-
Notifications
You must be signed in to change notification settings - Fork 1
Синтаксис
Шаблон - это файл любого содержания, в котором могут встречаться блоки конструкций, аргументов шаблона, комментариев и экземпляров виджетов. С их помощью можно управлять информацией, которая попадает в конечный документ.
{{ expr }}
Применяется для вставки в конечный документ значений аргументов шаблона. Наличие пробелов после открывающего тега {{
и закрывающего }}
не обязательно. Открывающий и закрывающий теги могут располагаться на разных строках.
expr
может быть любым допустимым выражением. Возможен вывод нескольких аргументов с помощью их перечисления через пробел или ;
(работает по тому же принципу, как в javascript: если лексический анализатор может однозначно определить конец одного выражения и начало другого - выражения разделяются, иначе следует применять оператор ;
).
Отличается от блока конструкций тем, что здесь не работают ключевые слова, т.е. можно использовать аргументы с такими именами, как if
, и они будут распознаны именно как аргументы, а не как операторы.
Простой вывод аргумента:
Текущая дата: {{ date }}
Вывод с экранированием специальных символов html с помощью пайп-функции:
<div>{{ post_content | safe }}</div>
Вывод нескольких переменных за раз (подряд, без разделения пробелами):
{{ base_url; link }}
(эквивалентно {{ base_url + link }}
)
С вычислением выражений:
Прямоугольник {{ width }}x{{ height }} имеет площадь {{ width * height }}
{? include page ?}
В данном блоке лексический анализатор распознает ключевые слова. Здесь работают такие конструкции, как if
, include
, for
.
Конструкции и выражения отделяются друг от друга по тому же принципу, как в блоке аргументов: когда возможно, пробелами, иначе запятыми.
Блок выражений может быть многострочным. При этом не запрещается отсутствие последнего закрывающего тега ?}
.
Типичное применение:
{? if auth_ok ?}
Вы успешно авторизованы
{? else ?}
Произошла ошибка, попробуйте еще раз позже!
{? end ?}
Многострочный блок:
Последние сообщения:
{? for msg in messages
include message msg;
end ?}
{* Здесь был Вася *}
Позволяет вставить комментарий в шаблон. Не попадает в конечный документ. Может быть многострочным.
<<page title="Test page">>Content<</page>>
Позволяет вставить экземпляр виджета в результирующий документ. Более подробно читайте в статье widget.
Для приведения конечного документа к более красивому виду (особенно в случае с html), парсер частично удаляет пробельные символы перед блоком конструкций и после него. Это происходит по следующим правилам:
- Перенос строки и следующие после него пробельные символы вплоть до тега
{?
удаляются. Если перед тегом{?
есть хотя бы один непробельный символ, текст переносится в конечный документ без изменений. - Пробельные символы и следующий за ними перенос строки сразу после тега
?}
удаляются. Если сразу после тега?}
и до переноса строки есть хотя бы один непробельный символ, текст переносится в конечный документ без изменений.