Система шаблонизации предназначена для того, чтобы вставить данные в соответствующие места файла-шаблона. Например, бланк настроек абонента представляет собой шаблон, в который NoDeny вставляет данные абонента в нужные места. Шаблонизатор NoDeny во многом повторяет синтаксис стандартного django шаблонизатора, но есть небольшие отличия.
Доступ к полям сложных структур
Шаблон | Входные данные | Результат |
Данные клиента: fio = {{user.fio}} phone = {{user.data._adr_phone}} |
user => { fio => 'Иванов Сергей', name => 'Ivanov', data => { _adr_phone => '067-12312312', _adr_house => '25', _adr_room => '14', } } |
Данные клиента: fio = Иванов Сергей phone = 067-12312312 |
Условия
Шаблон | Входные данные | Результат |
Здравствуйте, {% if name %}{{name}} {% else %}незнакомец {% endif %} На вашем счету {{balance}} рублей |
name = '' balance = 15 |
Здравствуйте, незнакомец На вашем счету 15 рублей |
{% if cash > 1000 %} Очень большая сумма! {% else %} Всего-то {{cash}} рублей? {% endif %} |
cash = 999 |
Всего-то 999 рублей? |
{% if name == 'admin' && error %} Произошла ошибка: {{error}} {% endif %} |
name = 'admin' error = 'wrong sql' |
Произошла ошибка: wrong sql |
Циклы
Шаблон | Входные данные | Результат |
{% for user in users %} {{user.name}} : {{user.fio}} {% endfor %} |
users => { 15 => { fio => 'Петров', name => 'Petroff' }, 16 => { fio => 'Болтунов', name => 'Mol4un' }, }; |
Petroff : Петров Mol4un : Болтунов |
Вызов метода
Шаблон | Входные данные | Результат |
message: {{msg.show()}} |
my $msg = bless { data => 'ok, man' }; sub show { return $msg->{data}.'!'}; nod::tmpl::render('test.tmpl', msg => $msg); |
message: ok, man! |
Обратите внимание, что в отличие от django шаблонизатора, после вызова метода мы явно ставим круглые скобки.
Фильтрация спецсимволов
Шаблон | Входные данные | Результат |
ФИО: {{fio|safe}} |
fio => '<test>' |
ФИО: <test> |
Вычисления
Шаблон | Входные данные | Результат |
{% eval i = 0 %} {% for word in words %} {% eval i = i + 1 %} {{i}}: {{word}} {% endfor %} |
words=> ['aaa', 'bbb', 'ccc'] |
1: aaa 2: bbb 3: ccc |