Как вывести примеры Perl Template Toolkit в Template ToolKit - PullRequest
2 голосов
/ 21 февраля 2012

Я делаю документацию для 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

У меня вопрос: есть ли альтернативный / лучший способ сделать это? В идеале, когда мне не нужно каждый раз эффективно дублировать код.

Ответы [ 2 ]

2 голосов
/ 21 февраля 2012

Вы можете присвоить свой код переменной, а затем передать ее через фильтр 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 голос
/ 06 марта 2012

Я нашел очень простое решение:

  1. Переместить пример кода в его собственный файл.

  2. В основном шаблоне используйте директивы INSERT и INCLUDE 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" запущен, он выдаст ожидаемый результат. В качестве дополнительного преимущества, размещение примеров фрагментов кода в их собственных файлах облегчает их редактирование / управление / сопровождение.

...