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

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

4

2 回答 2

2

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

[% TAGS [- -] %]

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

Produces the output:
    [- code | eval -]
于 2012-02-21T19:11:37.517 回答
1

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

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

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

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

例如,取以下三个文件:


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

于 2012-03-06T07:44:23.787 回答