http://www.perlmonks.org?node_id=1060837

packetstormer has asked for the wisdom of the Perl Monks concerning the following question:

Hello

I have a strange problem where an arrayref I send to Template, using Dancer, isn't being displayed correctly. I can't see the woods for the trees now so I hope someone can spot what I am doing wrong! The test arrayref rolls out fine, but the files arrayref just prints the hashrefs to screen!??

use Dancer; use DBI; use Template; use Data::Dumper; set 'database' => 'files.db'; set 'log' => 'debug'; set 'logger' => 'console'; get '/' => sub { my $db = connect_db(); my $sql = 'select * from table'; my $sth = $db->prepare($sql) or die $db->errstr; $sth->execute or die $sth->errstr; my $files = $sth->fetchall_arrayref({}); template 'show_entries.tt', { 'files' => $files, 'test' => [1,2,3,4,5] }; }; sub connect_db { my $dbh = DBI->connect("dbi:SQLite:dbname=".setting('database') ) or + die; return $dbh; }
And the template file:
<% FOREACH line IN files %> <% line.title %><br /> <% END %> <br /> <% FOREACH also IN test %> <% also %> <% END %>

Replies are listed 'Best First'.
Re: Dancer Arrayref to Template
by dasgar (Priest) on Nov 01, 2013 at 21:12 UTC

    By default, Dancer uses a simple templating system that has syntax that is very similar to Template::Toolkit. However, you can only pass scalars and you don't have other control stuff (like if statements, loops, etc.). If you try to pass an array or hash to the template with the default templating system choice, the variable in the template will only have the array reference or hash reference.

    In order to use Template::Toolkit, you need to have template: template_toolkit in your config.yml file or set template => 'template_toolkit'; in your code itself. Look at the Dancer::Config, Dancer::Template and Dancer::Template::Simple documentation for more details.