模板工具包FOR和IF行为

时间:2010-12-01 21:14:41

标签: html perl templates template-toolkit

我遇到了模板工具包的奇怪行为,比如我有一个数据结构(在perl中定义并作为参数传递):

( { FLAG => 1, some => data}, { some => data}, etc )

在模板中我有一个像

这样的循环
[FOR ITEMS]
  [IF (FLAG) ]
    do something
  [ELSE]
    do something else
  [END]
[END]

模板似乎永远不会进入else,我可以让它进入else的唯一方法是更改​​数据:

( { FLAG => 1, some => data}, { FLAG => 0, some => data}, etc )

以便评估为false。 但是,如果我然后将数据结构更改为

( { some => data}, { some => data}, etc )

它总是进入else(因为它将undef评估为false)。

似乎在下一次迭代的范围内有一些“流失”的变量,除非它们被覆盖,这是预期的行为吗?如果是这样的话,可以在任何地方记录下来吗?

编辑: 后来我发现这是导致上述行为的另一个问题,这是由于我使用“ELSEIF”而不是模板中其他地方的正确“ELSIF”。 如果有疑问,请查看jira提出的解决方案,解决了我在原始帖子中描述的问题。

1 个答案:

答案 0 :(得分:4)

您可以像下面那样修改模板,将循环变量分配给命名散列。然后它会表现得像你期望的那样。

[%FOREACH ITEM IN ITEMS%]

  [%IF ITEM.FLAG %]
    do something
  [%ELSE%]
    do something else
  [%END%]

[%END%]