Чтобы проверить, является ли переменная неопределенной или нет, вы можете проверить, возвращает ли ее метод size
что-то большее, чем 0. Конечно, этот случай применим, только если переменная не инициализирована или не определена вообще (enable_networking = ''
имеет размер = 1, то же самое с enable_networking = 0
)
Чтобы проверить, не является ли переменная ложной ... ну ... сначала вы должны описать, какой тип значения ложен.
В этом case я приму size = 0 (или размер не существует) как неопределенный, -1 как false и все остальное как true:
[% IF enable_networking.size and enable_networking != -1 %]
enable_networking = [% enable_networking %]
[% ELSE %]
-- a comment, variable enable_networking not provided
[% END %]
С кодом выше, если вы запустите
render template.tt enable_networking 0
Вывод будет enable_networking = 0
И если вы запустите
render template.tt
Вывод будет -- a comment, variable enable_networking not provided
, даже если вы не объявите [% DEFAULT enable_networking = -1 %]
РЕДАКТ. 1:
Для этой работы лучше подходит метод length
:
[% IF enable_networking.length and enable_networking != -1 %]
enable_networking = [% enable_networking %]
[% ELSE %]
-- a comment, variable enable_networking not provided
[% END %]
Использование length
вместо size
также позволяет вам использовать enable_networking = ''
как ЛОЖЬ вместе с -1
РЕДАКТИРОВАТЬ 2:
Хорошо, после комментариев я нашел обходной путь, который делает трюк: * 10 41 * - CATCH
директивы ...
Для необязательных переменных, которые могут иметь значение 0, целью будет TRY
установка значения переменной для себя, если переменная определена, значение будет присвоено иначе мы CATCH
ошибка undef и установим значение по умолчанию. Для любого другого типа переменной мы можем использовать директиву DEFAULT
:
[% DEFAULT
hostname = 0
%]
[% TRY %] [% enable_networking = enable_networking %] [% CATCH %] [% enable_networking = -1; %] [% END %]
hostname = [% hostname %]
[% IF enable_networking != -1 AND enable_networking.length %] enable_networking = [% enable_networking %][% ELSE %]-- variable enable_networking not provided[% END %]
С этим новым шаблоном, если вы запустите
$ render template.tt
hostname = 0
-- variable enable_networking not provided
$ render template.tt enable_networking ""
hostname = 0
-- variable enable_networking not provided
$ render template.tt hostname myhost enable_networking 0
hostname = myhost
enable_networking = 0