Template :: Toolkit不会将变量评估为字符串

src*_*ulo 5 perl template-toolkit evaluate

我正在使用Template :: Toolkit并且在for循环中我试图更改对象的时区:

[%- FOR item IN c.user.items -%] 
    [% item.date.set_time_zone(c.user.timezone.name) %]

    Date: [% item.date %] <br />
[% END %]
Run Code Online (Sandbox Code Playgroud)

它工作并且它改变了时区,但是该set_time_zone函数返回DateTime对象,然后将其计算到页面上.所以每次围绕for循环时,字符串都会被评估并放到页面上.我知道其他一些模板系统有两组标签,一组表示运行此代码,另一组表示评估此标记并将其放在页面上.Template :: Toolkit有这样的东西吗?我看了,但似乎找不到任何东西.到目前为止,我发现没有在页面上评估字符串的唯一方法是设置返回给变量的值:

[% var = item.date.set_time_zone(c.user.timezone.name) %]
Run Code Online (Sandbox Code Playgroud)

有没有人知道在Template :: Toolkit中更好的方法?

ste*_*enl 10

试试这个CALL指令:

[% CALL item.date.set_time_zone(c.user.timezone.name) %]
Run Code Online (Sandbox Code Playgroud)

从文档:

CALL指令在评估名为的变量时与GET类似,但不会打印返回的结果.当变量绑定到您要调用但对返回值不感兴趣的子例程或对象方法时,这可能很有用.