在这里关注舞者教程:
http://search.cpan.org/dist/Dancer/lib/Dancer/Tutorial.pod
我正在使用我自己的sqlite3数据库与此架构
CREATE TABLE if not exists location (location_code TEXT PRIMARY KEY, name TEXT, stations INTEGER);
CREATE TABLE if not exists session (id INTEGER PRIMARY KEY, date TEXT, sessions INTEGER, location_code TEXT, FOREIGN KEY(location_code) REFERENCES location(location_code));
数据库的舞者代码(helloWorld.pm):
package helloWorld;
use Dancer;
use DBI;
use File::Spec;
use File::Slurp;
use Template;
our $VERSION = '0.1';
set 'template' => 'template_toolkit';
set 'logger' => 'console';
my $base_dir = qq(/home/automation/scripts/Area51/perl/dancer);
# database crap
sub connect_db {
my $db = qw(/home/automation/scripts/Area51/perl/dancer/sessions.sqlite);
my $dbh = DBI->connect("dbi:SQLite:dbname=$db", "", "",
{ RaiseError => 1, AutoCommit => 1 });
return $dbh;
}
sub init_db {
my $db = connect_db();
my $file = qq($base_dir/schema.sql);
my $schema = read_file($file);
$db->do($schema) or die $db->errstr;
}
get '/' => sub {
my $branch_code = qq(BPT);
my $dbh = connect_db();
my $sql = q(SELECT * FROM session);
my $sth = $dbh->prepare($sql) or die $dbh->errstr;
$sth->execute or die $dbh->errstr;
my $key_field = q(id);
template 'show_entries.tt', {
'branch' => $branch_code,
'data' => $sth->fetchall_hashref($key_field),
};
};
init_db();
true;
在网站上尝试了示例模板,不起作用。
<% FOREACH id IN data.keys.nsort %>
<li>Date is: <% data.$id.sessions %> </li>
<% END %>
生成页面但没有数据。我如何解决这个问题,因为没有线索 进入控制台/ cli?
*更新* 如果我将数据库代码更改为:
get '/' => sub {
my $branch_code = qq(BPT);
my $dbh = connect_db();
my $sql = 'SELECT * FROM session';
#my $sth = $dbh->prepare($sql) or die $dbh->errstr;
#$sth->execute or die $dbh->errstr;
#my $key_field = q(id);
my $entries = $dbh->selectall_arrayref($sql,{});
template 'show_entries.tt', {
'branch' => $branch_code,
#'data' => $sth->fetchall_hashref('id'),
'data' => @$entries,
};
};
我从模板中的表中得到一个结果。所以信息正在传递,但是 模板的语法不起作用。这符合Template Toolkit语法。
由于
Bubnoff
编辑/解决方案**
大卫让我想起了Data :: Dumper,它确认问题确实存在于模板配置中。我在配置文件中注释掉了模板指令,认为它是多余的,因为它在代码本身中。错误!!!它必须在YAML中配置。删除配置中的octothorpe会将所有内容设置为权限。现在我只是因为没有首先尝试Data :: Dumper而感到尴尬。谢谢大卫!
答案 0 :(得分:6)
首先,确保您传递的是您认为传递给模板的内容。
将$ sth-&gt; fetchall_hashref($ key_field)的结果分配给临时标量,然后使用Data :: Dump或Data :: Dumper转储它(或者查看Dancer::Plugin::DebugDump以使其死亡的方法易)。