我使用Template::Toolkit并在for循环中尝试更改对象的时区:
[%- FOR item IN c.user.items -%]
[% item.date.set_time_zone(c.user.timezone.name) %]
Date: [% item.date %] <br />
[% END %]
它可以工作并且它会更改时区,但set_time_zone
函数会返回DateTime对象,然后将其评估到页面上。所以每次围绕for循环时,字符串都会被评估并放到页面上。我知道其他一些模板系统有两组标签,一组表示运行此代码,另一组表示评估此标记并将其放在页面上。 Template :: Toolkit有这样的东西吗?我看了,但我似乎无法找到任何东西。到目前为止,我发现没有在页面上评估字符串的唯一方法是设置返回变量的值:
[% var = item.date.set_time_zone(c.user.timezone.name) %]
有没有人知道在Template :: Toolkit中更好的方法?
答案 0 :(得分:10)
尝试CALL
指令:
[% CALL item.date.set_time_zone(c.user.timezone.name) %]
来自文档:
CALL指令在评估名为的变量时与GET类似,但不会打印返回的结果。当变量绑定到您想要调用的子例程或对象方法但对返回的值不感兴趣时,这可能很有用。