2011-08-11 23 views
3

如何筛选Template Toolkit中动态生成列表中的某些项目? 我有一个id列表(也是动态生成的)和一个id列表被排除在外,我只需要得到不被排除的id。什么最好的办法呢? 示例代码:使用Template Toolkit从列表中筛选项目

[% 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 %] 
+2

你为什么不将过滤的内容模板? –

+0

我现在正在做这个,但是我的第一个过滤器是在模板中进行过滤,而在Perl中使用智能匹配运算符(~~)很容易做到这一点,我很惊讶在TT中它并不那么容易。我试图寻找答案,并没有发现这里问这里。 – nsbm

+0

当前版本的TT通用(2.x)pre-dates perl 5.10,当时引入了smart-match操作符。人们通常会在pre-smart-match perl中使用grep {}构造。 – RET

回答

3

尝试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