【问题标题】:How can I output perl Template Toolkit examples in Template ToolKit如何在 Template ToolKit 中输出 perl Template Toolkit 示例
【发布时间】:2012-03-12 00:43:00
【问题描述】:

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

所以,我有这样的东西:

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

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

【问题讨论】:

    标签: perl template-toolkit


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 这听起来确实是解决您公认的不寻常用例的好方法。
      猜你喜欢
      • 2013-02-04
      • 1970-01-01
      • 2017-06-02
      • 2021-03-22
      • 1970-01-01
      • 2013-01-27
      • 2016-08-10
      • 2015-01-09
      • 2010-09-22
      相关资源
      最近更新 更多