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

3
我正在通过模板工具文件为模板工具制作一些文档。目标是展示我使用的代码以及代码的输出结果。目前,我是通过复制代码并将所有的“%”字符替换为“%”字符串来实现这一点。
因此,我会得到类似于这样的东西:
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个回答

2
您可以将代码分配给一个变量,然后通过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

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

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

  2. 在主模板中,使用 INSERTINCLUDE 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”时,它将产生预期的输出。另外,将示例代码片段放在自己的文件中也使它们更容易编辑、管理和维护。

这听起来像是对于你比较独特的使用情况的一个好的解决方案。 - RET

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接