在Template Toolkit中使用变量访问哈希键

5

我有一个数组,其内容为:

$VAR1 = {
'1' => 'May 05, 2011',
'0' => 'Jul 22, 2009',
'2' => 'Jun 13, 2012'
};

我正在尝试在催化剂模板中显示它,代码如下:
[% x = 0 %]
[% FOREACH mortgage IN mortgages %]

<table width=40% border=1 cellspacing="0" cellpadding="10">
    <tr>
        <td>Date</td>
        <td><b>[% dateformat.x %]</b></td>
    </tr>
 </table>
[% x = x+1 %]
[% END %]

dateformat.x应该根据x的值显示May 05, 2011或Jul 22, 2009或Jun 13, 2012,但错误在于它什么都没有显示,显示为空白。

我认为错误在于数组中的键是字符串,而与dateformat一起使用的x的值是数值型。如果我将0或1添加到dateformat中,则可以正确显示([% dateformat.0 %])。


我不明白你想做什么,出了什么问题。甚至不确定是否存在问题,因为你只说某些东西被正确显示了。可能只是我的问题,但个人建议你重新表述你的问题,如果你想得到答案的话。 - DeVadder
2个回答

10

[% dateformat.x %]dateformat 哈希中查找键为 x 的值。为了告诉模板工具箱 x 是一个变量,需要在其前面加上 $ 前缀:

[% dateformat.$x %]

为了使用存储在另一个变量中的键来访问哈希表条目,需要在键变量前加上"$"符号,以便在使用之前进行插值处理(请参阅变量插值)。


5

我知道这个问题已经被问过并得到了答案,但是一个方便的替代方法是使用 item() VMethod。当您有哈希键与 VMethods 冲突时,这种方法特别有效:

[%- SET myhash = { last => 'Blues', first => 'Elwood',
                   address => '1060 West Addison', city => 'Chicago' };
    myhash.first; # doesn't do what you want,
                  # because first is a VMethod for 1st element in an array
    myhash.item('first'); # displays "Elwood"
-%]

firstlastsizesort 等方法是此处常见的陷阱。


2
我特别为你点赞,因为你提供了一种在Template Toolkit中声明哈希变量的方法,而我一直在寻找这方面的知识,最终到达了这里。 - FantomX1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接