如何在Template Toolkit中输出perl Template Toolkit示例



我正在通过Template Toolkit文件为Template Toolkit制作一些文档。目标是显示我正在使用的代码以及代码的输出。现在,我正在通过复制代码并将所有"%"字符替换为"%"字符串来完成此操作。

所以,我会有这样的东西:

The Template Toolkit code:
    [% FOREACH name IN nameArray %][% name %][% IF !loop.last %], [% END %][% END %]
Produces the output:
    [% FOREACH name IN nameArray %][% name %][% IF !loop.last %], [% END %][% EN D%]

它将输出类似于:

The Template Toolkit code:
    [% FOREACH name IN nameArray %][% name %][% IF !loop.last %], [% END %][% END %]
Produces the output:
    George, Jane, Judy, Elroy

我的问题是,是否有其他/更好的方法可以做到这一点?理想情况下,我不必每次都有效地复制代码。

您可以将代码分配给一个变量,然后通过eval过滤器进行管道传输。要防止[%%]标记在模板中被解释,请使用TAGS指令将开始/结束标记设置为其他标记。示例:

[% TAGS [- -] %]
The Template Toolkit code:
    [- code = '[% FOREACH name IN nameArray %][% name %][% IF !loop.last %], [% END %][% END %]' -]
    [- code -]
Produces the output:
    [- code | eval -]

我找到了一个非常简单的解决方案:

  1. 将示例代码移动到其自己的文件中。

  2. 在主模板中,使用INSERT和INCLUDE template Toolkit指令来调用示例代码文件。

INSERT指令直接输出文件的内容(即不进行处理)。INCLUDE指令在输出文件之前以正常的Template Toolkit方式处理该文件

例如,以以下三个文件为例:


文件:process_template.pl

#!/usr/bin/perl 
use strict;
use warnings;
use Template;
my %data = (
    nameArray => [ 'George', 'Jane', 'Judy', 'Elroy' ]
);
my $tt_obj = Template->new();
$tt_obj->process('main.tmpl', %data) || die $tt_obj->error();

文件:main.tmpl

The Template Toolkit code:
[% INSERT "code_example.tmpl" %]
Produces the output:
[% INCLUDE "code_example.tmpl" %]

文件:code_example.tmpl

    [% FOREACH name IN nameArray %][%name%][% IF !loop.last %], [%END%][%END%]

当"process_template.pl"运行时,它将产生预期的输出。另外一个好处是,将示例代码片段放在它们自己的文件中,使它们更易于编辑/管理/维护。

最新更新