考虑这些TT命令(按顺序运行):
[% x = "foo" %] # x == "foo"
[% x = "bar" IF 1 %] # x == "bar"
[% x = "bar" IF 0 %] # x == ""
为什么x
被分配给第3个语句中的空字符串?
答案 0 :(得分:8)
http://template-toolkit.org/docs/manual/Syntax.html#section_Capturing_Block_Output
请注意将此语法与副作用符号结合使用时的一个重要警告。以下指令的行为与预期不符:
[% var = 'value' IF some_condition %] # does not work
在这种情况下,指令被解释为(为清晰起见而添加间距)
[% var = IF some_condition %]
value
[% END %]
而不是
[% IF some_condition %]
[% var = 'value' %]
[% END %]
变量被赋予IF块的输出,如果为真,则返回'value',但如果为false,则返回false。换句话说,以下指令将始终导致'var'被清除。
[% var = 'value' IF 0 %]
要实现预期的行为,该指令应写为:
[% SET var = 'value' IF some_condition %]