Skip to content

Синтаксис

Igor edited this page Aug 28, 2016 · 2 revisions

Синтаксис

Шаблон - это файл любого содержания, в котором могут встречаться блоки конструкций, аргументов шаблона, комментариев и экземпляров виджетов. С их помощью можно управлять информацией, которая попадает в конечный документ.

Блок аргументов

{{ 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), парсер частично удаляет пробельные символы перед блоком конструкций и после него. Это происходит по следующим правилам:

  • Перенос строки и следующие после него пробельные символы вплоть до тега {? удаляются. Если перед тегом {? есть хотя бы один непробельный символ, текст переносится в конечный документ без изменений.
  • Пробельные символы и следующий за ними перенос строки сразу после тега ?} удаляются. Если сразу после тега ?} и до переноса строки есть хотя бы один непробельный символ, текст переносится в конечный документ без изменений.