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

时间:2012-02-21 17:21:17

标签: 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

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

2 个答案:

答案 0 :(得分:2)

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

[% TAGS [- -] %]

The Template Toolkit code:
    [- code = '[% FOREACH name IN nameArray %][% name %][% IF !loop.last %], [% END %][% END %]' -]
    [- code -]

Produces the output:
    [- code | eval -]

答案 1 :(得分:1)

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

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

  2. 在主模板中,使用INSERTINCLUDE Template Toolkit指令调用示例代码文件。

  3. 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”时,它将产生预期的输出。作为一个额外的好处,将代码片段放在他们自己的文件中使它们更容易编辑/管理/维护。