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