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

发布于 2025-01-07 22:20:00 字数 733 浏览 1 评论 0 原文

我正在通过模板工具包文件为模板工具包制作一些文档。目标是展示我正在使用的代码以及代码的输出。现在,我通过复制代码并将所有“%”字符替换为“%”字符串来完成此操作。

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

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

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

I'm making some documentation for Template Toolkit via Template Toolkit files. The goal is to show the code that I'm using along with the outputs of the code. Right now, I'm doing this by making a copy of the code and replacing all the "%" characters with "%" strings.

So, I'd have something like this:

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%]

Which will output something like:

The Template Toolkit code:

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

Produces the output:

    George, Jane, Judy, Elroy

My question is if there is a alternate/better way to do this? Ideally one where I don't have to effectively duplicate the code each time.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

假情假意假温柔 2025-01-14 22:20:00

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

[% TAGS [- -] %]

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

Produces the output:
    [- code | eval -]

You can assign your code to a variable and then pipe it through the eval filter. To prevent the [% and %] tags from being interpreted in your template, use the TAGS directive to set the start/end tags to something else. Example:

[% TAGS [- -] %]

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

Produces the output:
    [- code | eval -]
空宴 2025-01-14 22:20:00

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

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

  2. 在主模板中,同时使用 INSERTINCLUDE 模板工具包指令来调用示例代码文件。

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

I found a very simple solution:

  1. Move the example code to its own file.

  2. In the main template, use both the INSERT and INCLUDE Template Toolkit directives to call the example code file.

The INSERT directive outputs the contents of the file directly (i.e. with no processing). The INCLUDE directive processes the file in the normal Template Toolkit way before outputting it.

For example, take the following three files:


File: 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();

File: main.tmpl

The Template Toolkit code:

[% INSERT "code_example.tmpl" %]

Produces the output:

[% INCLUDE "code_example.tmpl" %]

File: code_example.tmpl

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

When "process_template.pl" is run, it will produce the expected output. As an added benefit, placing the sample snippets of code in their own files makes them easier to edit/manage/maintain.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文