在Template Toolkit中,如果我有以下包含hashref的变量:
[%
artist = {
'life-span' => '1975 to 1987',
}
%]
Run Code Online (Sandbox Code Playgroud)
在"寿命"中输出数据的最佳方法是什么?
我试过了...
[% artist.life-span %]
Run Code Online (Sandbox Code Playgroud)
^因连字符而失败.
[% artist.'life-span' %]
Run Code Online (Sandbox Code Playgroud)
^这会失败,因为语法不正确.
[% lifespan = 'life-span' %]
[% artist.$lifespan %]
Run Code Online (Sandbox Code Playgroud)
^这有效,但在具有大量数据的大型应用程序中不切实际.
有没有更好的办法?
我正在研究的项目是基于Catalyst的Web应用程序,数据来自许多不同的外部Web服务,因此我不控制哈希键的名称.我想我可以预先处理Perl中的数据,在将它提供给TT之前重命名问题哈希键,但这似乎是一个非常糟糕的解决方法.
我一直在使用模板工具包扩展现有的域特定语言(verilog)超过3年.虽然整体而言我很满意,但主要的刺激是当出现语法/ undef错误时,错误消息不包含正确的行号信息来调试错误.
例如,我会得到一条消息,指示"0未定义",因为我将使用[%x.0%]和文件中多个位置的类似结构,确定哪一行有问题变得困难.
TT3似乎无限期地在开发中
我对大师的问题是有更好的替代TT.我的要求是
有没有办法让Perl Template显示所有未定义值的显示警告我试图在(via )期间使用该GET指令?[% %]Template::process
默认行为是忽略并继续前进.我想仅在未定义值的情况下发出警告(如果可能),并将消息记录到STDERR.
我希望能够为我的Perl程序创建Web前端.我对Perl有很多经验,并且我将大部分代码转换为由Chromatic支持的Modern Perl范例.我有写网页的ZERO经验.(偶尔会出现Word保存为网页).
我相信我知道开始使用哪些工具,我只是难以使用他们的开始文档以及学习工具的顺序.
Perl:我都在这里.
舞者:我创建了一个网站,但我很丢失,而cpan文档让我更加困惑.我不知道如何将这些网站与Apache集成,而不是使用Dancer附带的迷你服务器.
模板工具包:这个看起来最直接,我有O'Reilly的书.对于看似简单的东西来说,这似乎是一本非常大的书,所以我知道我错过了一些东西.
HTML:我应该学到多少钱?什么是最好的学习路径?
最终,最好的是"使用Perl从头开始构建现代网站"教程,书籍,视频系列或网站.
请问,从哪里开始?
使用Template :: Toolkit时,对各种模板的性能进行基准测试的最佳方法是什么?
我想要一些能够分解处理每个块或模板文件花费多少CPU /系统时间的东西,不包括处理其他模板所花费的时间. 例如,Devel :: DProf对此无用,因为它只是告诉我在模块模块的各种内部方法中花了多少时间.
我可以以某种方式配置模板工具包,以便:
[% foo %]
Run Code Online (Sandbox Code Playgroud)
做你现在需要说的话:
[% foo | html %]
Run Code Online (Sandbox Code Playgroud)
也就是说,转义HTML foo?并做一些其他事情,如:
[% foo | noHtml %]
Run Code Online (Sandbox Code Playgroud)
如果我不想逃?
每次运行CGI脚本时都会收到此警告(输出由Template :: Toolkit呈现):
Wide character in print at /usr/local/lib/perl5/site_perl/5.8.9/mach/Template.pm line 163.
什么是消除它的正确方法?
我使用这个配置创建tt对象:
my %config = (
ENCODING => 'utf8',
INCLUDE_PATH => $ENV{TEMPLATES_DIR},
EVAL_PERL => 1,
}
my $tt = Template->new(\%config);
Run Code Online (Sandbox Code Playgroud) 给定DBIx :: Class结果集,例如:
my $rs = $c->model("DB::Card")->search({family_name => "Smith"});
Run Code Online (Sandbox Code Playgroud)
我读过的教程使用stash传递一行arrayref:
$c->stash->{cards} = [$rs->all];
Run Code Online (Sandbox Code Playgroud)
这导致查询在此时执行,并且生成的对象填充到存储中,因此它们可以在TemplateToolkit中用作:
[% FOREACH card IN cards %]
[% card.given_name %] [% card.family_name %]
[%END%]
Run Code Online (Sandbox Code Playgroud)
有没有一种正确的方法让TT在从数据库中获取时对行进行迭代?
在Perl链接方法中处理异常的最佳方法是什么?如果链接的任何方法抛出异常,我想分配值0或undef
代码示例:
my $x = $obj->get_obj->get_other_obj->get_another_obj->do_something;
Run Code Online (Sandbox Code Playgroud)
最好的办法是什么?我每次都必须在try/catch/finally语句中包装吗?我想要应用的上下文是:我正在使用Catalyst和DBIC进行Web开发,我做了很多链式结果集,如果这个结果集中的一些抛出异常,我只想分配0或undef的值,然后对待它模板中的错误(我使用Template Toolkit).如果还有另一种方法可以做到这一点而不包含try/catch中的每个调用,请告诉我.如果您知道在相同的上下文(Catalyst/DBIC/TT)中处理此类错误的更好方法,请建议.一个实际的例子是当用户搜索某些内容时,这不存在.
所以,如果我给模板工具包一个引用数组作为参数
ARRAY_REF => \@array
Run Code Online (Sandbox Code Playgroud)
然后在模板中包含以下代码
[% IF ( ARRAY_REF ) %]
Do something
[% ELSE %]
Do something else
[% END %]
Run Code Online (Sandbox Code Playgroud)
其他情况永远不会被触发.
用.替换参数代码
ARRAY_REF => @array ? \@array : undef;
Run Code Online (Sandbox Code Playgroud)
似乎解决了这个问题,但我想知道是否有一种方法可以让模板工具包评估一个空数组(通过引用传递)为false,因为我的项目中有很多实例,我相信这个实例正在被使用(如在HTML模板中)亲它按预期工作).
提前谢谢大家的帮助.
perl ×10
template-toolkit ×10
catalyst ×3
templates ×3
dbix-class ×2
dancer ×1
html ×1
profiling ×1
unicode ×1
warnings ×1