2010-12-02 53 views
0

我有一个数据文件创建分组输出使用模板工具包

city : name 
London : John 
London : George 
Paris : Jean 

而且我想输出

London 
    John 
    George 
Paris 
    Jean 

我感觉我想是这样

[% USE namelist = datafile('namelist.txt') %] 
[% FOREACH city = unique namelist.city ??? %] 
[% city %] 
[% FOREACH name =???? %] 
[% name %] 

[%END %]  
[%END %] 

回答

2

这可能是最好的在您的控制器中进行这种数据通讯。模板工具包的工作是把事情弄清楚并让它们变得漂亮,而不是“计算”。

你需要的是更多的东西一样:

[% SET list = formatter.group_them('namelist.txt') %] 
[% FOREACH item IN list %] 
[% item.key %] 
    [% FOREACH name IN item.value %] 
     [% name %] 
    [% END %] 
[% END %] 

这是可以做到你想做的事,多种方式。您可以使用VMethods http://template-toolkit.org/docs/manual/VMethods.html分裂,创建一个数组,再次分裂,构建一个散列:

[% data = INSERT 'namelist.txt' %] 
[% lines = data.split("\n") %]\ 
[% list = {} %] 
[% FOREACH line IN lines %] 
    [% pair = line.split(': ') %] 
    [% city = pair.0; name = pair.1; list.city.push(name) %] 
[% END %] 

OK,我不得不承认,我会感到羞愧看到这个我继承的模板。但有时我们做的事情,别人治死了一个很好的理由......当时...... :-)

一个稍微好一点的办法是插入

[% RAWPERL %] 

块。至少在那时候,你承认,你在模板中有代码并以自然而有效的方式进行操作。