0

我在 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>

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

4

2 回答 2

14

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

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

上面仍然复制@list并返回一个引用。如果要获取对现有数组的引用,请使用\@list.

于 2011-08-31T17:25:43.033 回答
6

我敢打赌这是因为您必须将数组引用传递给'values'

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

否则列表会扩大,你实际上是通过:

template 'list.tt', {
        'values' => $list[0],
        $list[1] => $list[2],
};
于 2011-08-31T17:26:13.690 回答