При подстановке в шаблон данных, передаваемых пользователем (например, переданных ранее через форму на сайте), эти данные обязательно экранируются с помощью фильтра html:
[% company_name | html %]. |
Во избежание атак XSS.
К оформлению кода внутри шаблонов применяются те же самые требования, что и к оформлению кода на Perl. В частности это касается расстановки пробелов (пробелы вокруг операторов, пробелы после запятых, вокруг сложных индексных выражений и т.п.) Например,
[% news = [ { date => '31.12.2007', title => 'Happy new Year' } ] %] [% FOREACH n = news %] |
При использовании логических / блочных конструкций TT данные, внутри блока сдвигаются вправо для улучшения удобочитаемости:
[% IF ru %] русский текст [% ELSE %] english text [% END %] |
В случае необходимости отображения списка или таблицы, где строки передаются в виде массива, должна быть проверка на непустоту этого массива и соответствующая адекватная реакция. Например, вместо вывода пустой таблицы или списка лучше вывести пояснительный текст: "Заказы пока отсутствуют" или "Новостей на сегодня нет".
Шаблон должен интерпретироваться без ошибок даже в случае, если требуемые шаблоном переменные не передаются шаблонизатору. Это означает, что в шаблонах должна быть предусмотрена адекватная защита, на случае, если данные не передаются.
Если при обработке шаблона, в случае отсутствия необходимых данных, возникают фатальные ошибки или предупреждения, это не позволяет применять процедуры автоматического тестирования, проверающие валидность всех шаблонов. В частности валидность шаблона нельзя будет в произвольный момент времени проверить с помощью утилит tpage или ttree.
В шаблонах Template Toolkit/Catalyst предопределены имена c, context, template и component.
Кроме того, наша система лэйаутов резервирует для себя имена current_layout, html и content.
Запрещается передавать в контекст шаблонов переменные/методы/etc. с такими именами.