标签: template-toolkit

如何在Template Toolkit中处理包含非法标识符字符的哈希键?

在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之前重命名问题哈希键,但这似乎是一个非常糟糕的解决方法.

perl catalyst template-toolkit

16
推荐指数
1
解决办法
1327
查看次数

Perl:模板工具包的替代品

我一直在使用模板工具包扩展现有的域特定语言(verilog)超过3年.虽然整体而言我很满意,但主要的刺激是当出现语法/ undef错误时,错误消息不包含正确的行号信息来调试错误.

例如,我会得到一条消息,指示"0未定义",因为我将使用[%x.0%]和文件中多个位置的类似结构,确定哪一行有问题变得困难.

TT3似乎无限期地在开发中

我对大师的问题是有更好的替代TT.我的要求是

  1. 支持复杂的数据结构
  2. 良好的错误报告和调试功能.
  3. 稳定且经过验证(没有alpha/beta级引擎)
  4. 可扩展(插件等)
  5. 不应限于给定的语言(HTML等)
  6. 支持IF/Else,循环(foreach while),循环索引等.
  7. 优选perl
  8. 从模板中支持数据转储器或等效插件是一个优点

perl templates template-engine template-toolkit

15
推荐指数
4
解决办法
5764
查看次数

Perl的模板工具包可以警告未定义的值吗?

有没有办法让Perl Template显示所有未定义值的显示警告我试图在(via )期间使用该GET指令[% %]Template::process

默认行为是忽略并继续前进.我想在未定义值的情况下发出警告(如果可能),并将消息记录到STDERR.

perl templates warnings template-toolkit

14
推荐指数
2
解决办法
2551
查看次数

我怎样才能开始使用Perl进行Web开发?

我希望能够为我的Perl程序创建Web前端.我对Perl有很多经验,并且我将大部分代码转换为由Chromatic支持的Modern Perl范例.我有写网页的ZERO经验.(偶尔会出现Word保存为网页).

我相信我知道开始使用哪些工具,我只是难以使用他们的开始文档以及学习工具的顺序.

  • Perl:我都在这里.

  • 舞者:我创建了一个网站,但我很丢失,而cpan文档让我更加困惑.我不知道如何将这些网站与Apache集成,而不是使用Dancer附带的迷你服务器.

  • 模板工具包:这个看起来最直接,我有O'Reilly的书.对于看似简单的东西来说,这似乎是一本非常大的书,所以我知道我错过了一些东西.

  • HTML:我应该学到多少钱?什么是最好的学习路径?

最终,最好的是"使用Perl从头开始构建现代网站"教程,书籍,视频系列或网站.

请问,从哪里开始?

html perl template-toolkit dancer

13
推荐指数
1
解决办法
9577
查看次数

如何在Template :: Toolkit中分析模板性能?

使用Template :: Toolkit时,对各种模板的性能进行基准测试的最佳方法是什么?

我想要一些能够分解处理每个块或模板文件花费多少CPU /系统时间的东西,不包括处理其他模板所花费的时间. 例如,Devel :: DProf对此无用,因为它只是告诉我在模块模块的各种内部方法中花了多少时间.

perl templates profiling template-toolkit

12
推荐指数
1
解决办法
1538
查看次数

默认情况下,在Template Toolkit中转义HTML

我可以以某种方式配置模板工具包,以便:

[% 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)

如果我想逃?

perl template-toolkit

12
推荐指数
2
解决办法
1872
查看次数

如何消除TT的"宽字符打印"警告?

每次运行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)

unicode perl template-toolkit

11
推荐指数
1
解决办法
6932
查看次数

在使用Template Toolkit的Catalyst项目中显示DBIx :: Class ResultSet的正确方法是什么?

给定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 catalyst template-toolkit dbix-class

10
推荐指数
2
解决办法
4243
查看次数

如何处理Perl中方法链中的错误?

在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)中处理此类错误的更好方法,请建议.一个实际的例子是当用户搜索某些内容时,这不存在.

error-handling perl catalyst template-toolkit dbix-class

10
推荐指数
1
解决办法
811
查看次数

模板工具包IF在空数组上返回true,我可以将其设为false吗?

所以,如果我给模板工具包一个引用数组作为参数

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 template-toolkit

8
推荐指数
2
解决办法
6507
查看次数