TT如何在数组中的变量中打印字符串?

时间:2014-03-05 16:27:06

标签: arrays string variables foreach template-toolkit

我还是相当新的TT,所以我所要求的可能没有意义,也不可能,如果是这样我会找到另一种方法,基本上我正在使用FOREACH循环来运行变量数组和构建表,它工作正常但我基本上想要添加节标题,这就是问题所在。如果我在数组中有section('string'),我该如何打印该字符串?

我将举例说明我的代码。

要构建的数据数组

content_list=[ 

            section('First Section'),"somecontent","some_other_content", 

            section('Second Section'), "somecontent", "some_other_content" 
]

构建代码

<table>

    [% FOREACH entry IN content_list %]

        [% IF entry == section %]
        <tr>
            <th> [% #this needs to output the string, ie 'First Section' %]</th>
        </tr>
        [% END %]

        <tr>
            <td>The content is: [% entry %]</td>
        </tr>

    [% END %]

</table>

它将识别entry = section并打印th,但我无法弄清楚如何打印该部分中包含的字符串?任何帮助将不胜感激!

(我意识到这可能是一个更简单,更合乎逻辑的方法,但这是一小段代码的小片段,需要改变大声笑)

1 个答案:

答案 0 :(得分:0)

您的arrayref中的section(arg)究竟是什么?这是一个TT宏还是你的伪代码示例?

我感谢你不想重写整件事。是否有可能以某种方式存储节标题,以便以后识别它们是什么,即:

content_list=[ 
    { section => 'First Section' }, "somecontent", "some_other_content", 
    { section => 'Second Section' }, "somecontent", "some_other_content" 
];

以及后来:

    [% IF entry.section %]
    <tr>
        <th> [% entry.section %]</th>
    </tr>
    [% END %]

如果沿着这条路走下去,你可能要考虑将数组中的所有元素转换为小的hashrefs,即:

content_list = [ 
    { content => 'First Section', section=>1 }, { content => "somecontent" },
    { content => "some_other_content" }, { content => 'Second Section', section=>1 },
    { content => "somecontent" }, { content => "some_other_content", some_flag=>1 }
];

然后每个entry IN content_list可以是一个具有自己适合的属性的对象。


另一种方法是创建一个你知道的标题内容项的哈希值,然后测试它们,即:

[% SET header = { 'First Section' => 1, 'Second Section' => 1, ... }; %]

以及后来:

[% IF header.$entry %]
    <tr>
        <th>[% entry %]</th>
    </tr>