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

Posted

技术标签:

【中文标题】Template::Toolkit 不将变量评估为字符串【英文标题】:Template::Toolkit don't evaluate variable as string 【发布时间】:2014-08-31 08:27:51 【问题描述】:

我正在使用 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 中执行此操作的更好方法?

【问题讨论】:

【参考方案1】:

试试CALL 指令:

[% CALL item.date.set_time_zone(c.user.timezone.name) %]

来自文档:

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

【讨论】:

以上是关于Template::Toolkit 不将变量评估为字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 Template Toolkit 中包含非法标识符字符的哈希键?

如何在 Template::Toolkit 中分析模板性能?

为啥 SymPy 不将 (-x**3)**(2/3) 简化为 x**2?

访问VBA代码不将变量设置为查询值

评估前缀表达式的算法?

http.get 不将数据传递给页面类变量