【问题标题】:Template toolkit FOR and IF behavior模板工具包 FOR 和 IF 行为
【发布时间】:2011-05-18 18:29:29
【问题描述】:

我在使用模板工具包时遇到了奇怪的行为,比如说我有一个数据结构(在 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 )

因此它的评估结果为假。 但是,如果我将数据结构更改为

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

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

似乎有一些变量“溢出”保留在下一次迭代的范围内,除非它们被覆盖,这是预期的行为吗?如果是的话,它是否记录在任何地方?

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

【问题讨论】:

    标签: html perl templates template-toolkit


    【解决方案1】:

    您可以修改模板,如下所示,将循环变量分配给命名散列。然后它将按照您的预期运行。

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

    【讨论】:

    • 非常感谢您的回复,我遇到的问题是我实际上是通过使用正则表达式替换的 perl 脚本将 html 模板 pro 模板“转换”为模板工具包模板。把它们变成你建议的形式会增加一些工作,但是如果它是唯一的选择它仍然是可以管理的。
    猜你喜欢
    • 2020-08-18
    • 1970-01-01
    • 2010-12-23
    • 2011-12-26
    • 2012-07-29
    • 1970-01-01
    • 2020-12-11
    • 2019-01-03
    • 2012-07-03
    相关资源
    最近更新 更多