Perl Dancer: foreach в шаблоне печатает только первое значение - PullRequest
0 голосов
/ 31 августа 2011

У меня есть то, что должно быть действительно простой проблемой в 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>

Выводит список только с одним элементом, «один». Чего мне не хватает?

Ответы [ 2 ]

14 голосов
/ 31 августа 2011

Выражение 'values' => @list расширяется до списка, который содержит "values" "one" "two" "three", поэтому вы должны попробовать вместо этого использовать ссылку на массив:

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

Выше все еще копирует @list и возвращает ссылку,Если вы хотите получить ссылку на уже существующий массив, используйте \@list.

6 голосов
/ 31 августа 2011

Держу пари, потому что вам нужно передать ссылку на массив в 'values':

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

В противном случае список расширяется, и вы фактически передаете:

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