我想在我的 TT 模板中使用一个常量。在HTML::Mason(我之前选择的模板引擎)中,我可以这样做:
<%once>
use MyApp::Constants qw(CONSTANT);
</%once>
如何在模板工具包中做到这一点?正如标题中提到的,这是一个Catalyst应用程序,所以我想我可以将常量放在存储中,但这似乎有点尴尬。
- 编辑
抱歉 - 我应该提到我想使用我自己的常量 - 从 MyApp::Constants 导出,没有重复。
我想在我的 TT 模板中使用一个常量。在HTML::Mason(我之前选择的模板引擎)中,我可以这样做:
<%once>
use MyApp::Constants qw(CONSTANT);
</%once>
如何在模板工具包中做到这一点?正如标题中提到的,这是一个Catalyst应用程序,所以我想我可以将常量放在存储中,但这似乎有点尴尬。
- 编辑
抱歉 - 我应该提到我想使用我自己的常量 - 从 MyApp::Constants 导出,没有重复。
在您的 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::
}
}
)
}
这会查看 package 中的所有符号MyApp::Constants
,检查它们是否被定义为子例程(这是幕后工作constant.pm
),然后用于map
将它们的 hashref 提供给 TT。
几种可能。只需定义一些变量:
[% 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 指令允许在模板中定义简单的元数据项。这些在模板被解析时被评估,因此可能只包含简单的值(例如,不可能将其他变量值插入到 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