Vibe.d. Добавление кода D в шаблон

Vibe.d отличается от других фреймворков своим быстродействием. Это достигается, в том числе, за счет превращения шаблонов при компиляции в код D. Пользователь запрашивает страницу и HTML-код выдается с максимально возможной скоростью без дополнительной обработки. Такой подход позволяет делать вставки кода D в шаблон.

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

Есть два способа вывода результата вычисления. Если добавить знак равенства тегу, то шаблонизатор интерпретирует текст, который следует за тегом, как выражение D. А если поместить выражение D между #{и} символами, то вычисленное значение окажется внутри этой вставки. Первый способ удобен для отображения статичных строк, а второй для динамических данных.

Следующий код демонстрирует использование D-кода в шаблоне:

- import std.string : toUpper;
- string title = "Добавление кода D в шаблон";
doctype html
head
  title = title
body
  h1 #{ title.toUpper }
  - for(int i = 1; i<5; i++)
    p Параграф № #{i}
  - int summ(int a, int b)
    - return a + b;
  p Сумма 2 и 3 равна #{ summ(2, 3) }.

Замените код в index.dt на этот.

Первые две строки являются целиком вставками кода D. В пятой строке тегу title с помощью «=» присваивается значение переменной title, заданной во второй строке. В седьмой строке происходит то же самое, что и в пятой, за исключением добавленного метода toUpper, который превращает все буквы текста в заглавные. В девятой строке используется второй способ вывода значения. Параграф выводится 4 раза, каждый из них с новым значением переменной i. В строках 10 и 11 задана функция вывода суммы двух переменных. В 12-той строке она используется.

Страничка в браузере выглядит следующим образом:

dinc

Примечание: не используйте {} для группировки операторов, иначе будет ошибка. Например, в строках 10, 11 тело функции задается без этих скобок. Если все же необходимо использовать не экранированную вставку кода, то делайте это через !{}. Но помните - это опасно, так как теоретически позволяет произвести XSS-инъекцию.

Добавить комментарий