【问题标题】:Filter items from a list using Template Toolkit使用 Template Toolkit 从列表中过滤项目
【发布时间】:2011-10-25 06:22:48
【问题描述】:

如何过滤 Template Toolkit 中动态生成的列表中的某些项目? 我有一个 id 列表(也是动态生成的)和一个要排除的 id 列表,我只需要获取未排除的 id。最好的方法是什么? 示例代码:

[% SET ids = [1,2,4,10,11,12,13,17,19,20,21,50,51] %]
[% SET id_excluded = [10,11,13,20,50] %]
[% FOREACH pid IN ids %]
    [% IF ?code to filter the ids? %]
        [% pid %]
    [% END %]
[% END %]

【问题讨论】:

  • 为什么不将过滤后的内容传递给模板?
  • 我现在实际上正在这样做,但我的第一个想法是在模板中进行过滤,而在 Perl 中,使用智能匹配运算符 (~~) 很容易做到这一点,我很惊讶在 TT这不是那么容易。我试图寻找答案,但在这里没有找到。
  • 当前通用的 TT 版本 (2.x) 早于 perl 5.10,当时引入了智能匹配运算符。通常也会在 pre-smart-match perl 中使用 grep {} 结构。

标签: perl template-toolkit


【解决方案1】:

尝试使用grep VMethod 获取列表,例如:

[% SET ids = [1,2,4,10,11,12,13,17,19,20,21,50,51] %]
[% SET id_excluded = [10,11,13,20,50] %]
[% FOREACH pid IN ids %]
    [% UNLESS id_excluded.grep("^$pid\$").size %]
        [% pid %]
    [% END %]
[% END %]

这会产生以下内容:

1 2 4 12 17 19 21 51

【讨论】:

    猜你喜欢
    • 2011-06-18
    • 2017-08-20
    • 2021-02-28
    • 2020-08-31
    • 2013-04-22
    • 2014-04-06
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    相关资源
    最近更新 更多