3

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

私の質問は、これを行うための代替/より良い方法があるかどうかです? 理想的には、コードを毎回効果的に複製する必要がない場所です。

4

2 に答える 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 -]
于 2012-02-21T19:11:37.517 に答える
1

私は非常に簡単な解決策を見つけました:

  1. サンプル コードを独自のファイルに移動します。

  2. メイン テンプレートで、INSERTおよびINCLUDE Template Toolkit ディレクティブを使用してサンプル コード ファイルを呼び出します。

このINSERTディレクティブは、ファイルの内容を直接 (つまり、処理なしで) 出力します。INCLUDEディレクティブは、ファイルを出力する前に、通常の Template Toolkit の方法でファイルを処理します。

たとえば、次の 3 つのファイルを使用します。


ファイル: 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 に答える