perl dancer:foreach in template只打印第一个值

时间:2011-08-31 17:21:52

标签: perl template-toolkit dancer

我在Dancer中应该有一个非常简单的问题:我有一个名字数组,我想在模板中打印每一个。这些名称来自外部源(不是数据库)。但是,当我尝试对模板中的列表进行foreach时,我只得到第一个值。

代码:

use Dancer;
use Template;

set 'template' => 'template_toolkit';

get '/' => sub {
    my @list = ("one","two","three");
    template 'list.tt', {
            'values' => @list,
    };
};
dance;

模板:

<ul>
    <%FOREACH item IN values %>
        <li><% item %></li>
    <%END%>
</ul>

这只输出一个包含单个项目“1”的列表。我错过了什么?

2 个答案:

答案 0 :(得分:14)

表达式'values' => @list扩展为包含"values" "one" "two" "three"的列表,因此您应尝试使用对该数组的引用:

template 'list.tt', {
        'values' => [@list],
};

上述内容仍会复制@list并返回引用。如果要获取对现有数组的引用,请使用\@list

答案 1 :(得分:6)

我打赌它是因为你必须将数组引用传递给'values'

template 'list.tt', {
        'values' => \@list,
};

否则列表会扩展,你实际上正在传递:

template 'list.tt', {
        'values' => $list[0],
        $list[1] => $list[2],
};