为什么我不能在模板工具包中对变量执行替换?

时间:2011-04-15 17:58:06

标签: regex template-toolkit

我正在使用Template Toolkit并且替换功能无效。 这是我的代码......

  [% FOREACH item = file_conversions %]
  [% item.name | replace('a','z') %]
    <option value="[% item.name %]">[% item.name %]</option>
  [% END %]

在上面的情况下替换在item.name上没有做任何事情。只是为了踢,我把它切换到以下......

  [% FOREACH item = file_conversions %]
  [% item.name="Janie" | replace('a','z') %]
    <option value="[% item.name %]">[% item.name %]</option>
  [% END %]

它完美无缺。

有没有人知道为什么我不能对TT中的变量进行简单替换?

2 个答案:

答案 0 :(得分:1)

替换出现在TT中的两个上下文中:作为过滤器,以及作为标量的虚拟方法。

   Virtual method modifies the scalar:

    [% item.name.replace('a', 'z') #item.name has changed %]

   Filter modifies the output:

    [% item.name |replace('a', 'z') #item.name has not changed %]

在原始问题情况下,您使用的是过滤器,因此item.name的值保持不变。在“工作”示例中,您将过滤值“Janie”,然后将结果分配给item.name:

   [% item.name = 
        'Janie' | replace('a', 'o') %]

这是一篇很老的帖子,你继续前进,但也许有人会觉得这很有帮助! (实际上,当我不得不看几件事来回答它时,我做了!)

答案 1 :(得分:0)

嘿伙计们!我想到了!这很棒!

  [% FOREACH item = file_conversions %]
    [% item.name = item.name.replace('a','z') %]
    <option value="[% item.name %]">[% item.name %]</option>
  [% END %]