1

考虑这些TT命令(按顺序运行):

[% x = "foo" %]        # x == "foo" 
[% x = "bar" IF 1 %]   # x == "bar"
[% x = "bar" IF 0 %]   # x == ""

为什么x在第三条语句中分配给一个空字符串?

4

1 回答 1

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 块的输出,如果为 true,则返回“value”,如果为 false,则不返回任何内容。换句话说,下面的指令总是会导致 'var' 被清除。

[% var = 'value' IF 0 %]

为了达到预期的行为,指令应该写成:

[% SET var = 'value' IF some_condition %]
于 2012-04-20T09:46:12.550 回答