我想在我的TT模板中使用常量。在HTML::Mason(我之前选择的模板引擎)中,我可以这样做:
<%once>
use MyApp::Constants qw(CONSTANT);
</%once>
我如何在Template Toolkit中执行此操作?正如标题中所提到的,这是一个Catalyst应用程序,所以我想我可以把常量放在藏匿处,但这看起来有点尴尬。
- 修改
抱歉 - 我应该提到我想使用我自己的常量 - 从MyApp :: Constants导出,没有重复。
答案 0 :(得分:4)
在TT配置中,您可以使用VARIABLES选项传递将在处理时传递给每个模板的值列表。使用一些符号表技巧,你可以将所有常量输出到配置中:
use MyApp::Constants;
use Template;
my $tt; # template object
{
no strict 'refs';
$tt = Template->new( {
VARIABLES => { map { $_ => &{ 'MyApp::Constants::' . $_ } }
grep { defined &{ 'MyApp::Constants::' . $_ } }
keys %MyApp::Constants::
}
}
)
}
这会查看包MyApp::Constants
中的所有符号,检查它们是否被定义为子例程(这是constant.pm
所做的内容),然后使用map
来提供将它们的hashref转换为TT。
答案 1 :(得分:2)
几种可能性。 只需定义一些变量:
[% users = {
tom => 'Thomas',
dick => 'Richard',
larry => 'Lawrence',
}
%]
[% FOREACH u IN users %]
* [% u.key %] : [% u.value %]
[% END %]
使用全局变量:
[% global.version=1.234 %]
This is Version [% global.version %].
META指令允许简单 要在a中定义的元数据项 模板。这些是在评估时评估的 模板被解析,因此可能 只包含简单的值(例如它 不可能插入其他 变量值转换为META变量。)
[% META
title = 'The Cat in the Hat'
author = 'Dr. Seuss'
version = 1.23
%]
正如您在问题正文中已经提到的那样,还有: http://template-toolkit.org/docs/manual/Variables.html#section_Compile_Time_Constant_Folding