原来的代码差不多是这样子的:
package Feeder::V::TT;可怎么运行都不行。试了好一会儿,后来才发现原来 Template 的 INCLUDE_PATH 默认是用 : 来分隔多个路径的,比如:use strict;
use base 'Catalyst::View::TT';
use Template::Constants qw( :debug );__PACKAGE__->config({
# any TT configurations items go here
INCLUDE_PATH => Feeder->config->{'home'} . '/templates/',
POST_CHOMP => 1,
PRE_CHOMP => 1,
EVAL_PERL => 1,
PRE_PROCESS => 'header.tt',
POST_PROCESS => 'footer.tt',
DEBUG => DEBUG_PARSER | DEBUG_PROVIDER,
CONTEXT => undef,# two optional config items
CATALYST_VAR => 'Catalyst',
TIMER => 1,
});
INCLUDE_PATH => '/home/abw/templates:/usr/share/templates',这样就是两个路径。而我运行在 Win32 下,发现 Template 将 E:/Fayland/Feeder/templates 划分为了两个路径 E 和 /Fayland/Feeder/templates, 所以运行程序总是跳出找不到模版文件。知道原因后查了查 Perl Template Toolkit 一书,在配置里加了一句:
DELIMITER => ';',这样就不是用 : 而是用 ; 来划分了。
这只是因为自己不熟悉 Template 的配置选项。于是就复习了一遍,将常用的几个翻译如下:
my $tt = Template->new({
BLOCKS => {
header => 'The Header. [% title %]',
footer => sub { return $some_output_text },
another => Template::Document->new({ ... }),
},
});Hash 的值可以是模版内容,子程序或是 Template::Documentmy $tt1 = Template->new({
COMPILE_DIR => '/tmp/ttc',
COMPILE_EXT => '.ttc1',
});COMPILE_DIR 是地址,COMPILE_EXT 为后缀名。 # Win32 only
my $tt = Template->new({
DELIMITER => ';',
INCLUDE_PATH => 'C:/TT2/Templates;D:/My Templates',
});
my $tt = Template->new({
CONSTANTS => {
title => 'A Demo Page',
author => 'Joe Random Hacker',
version => 3.14,
},
};CONSTANTS_NAMESPACE => 'const',后,可以用 [% const.title %] 来访问。
评论加载中…
![]() |