我在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”的列表。我错过了什么?
答案 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],
};