如何在模板工具包中使用空格缩进

问题描述 投票:0回答:1

我正在使用模板工具包。我正在编写 tt2 编程,但如果我使用空格缩进,它也会反映在输出中。有什么方法可以不反映在输出中

       [% FOREACH md IN data.keys.sort -%]
       [% FOREACH timeplate IN data.$md.keys.sort -%]
       [% IF (timeplate == 'timeplate') -%]
       [% FOREACH tp IN data.$md.$timeplate.keys.sort -%]
       [% FOREACH proc IN data.$md.$timeplate.$tp.procedure -%]
       [% procedure.$proc = tp -%]
       [% END -%]
       [% END -%]
       [% END -%]
       [% END -%]
       [% END -%]
template-toolkit
1个回答
0
投票

Template Toolkit 中的默认分隔符是

[%
%]
。带有连字符
[%-
-%]
的替代版本会“吃掉”第一个换行符之前的空格。试试这个代码:

use Template;

my $tt = Template->new;

my $input = <<'EOF';
top
[%- IF 1 -%]
    text
[%- END -%]
bottom
EOF

$tt->process(\$input);

输出一行:

top textbottom

尝试不同的分隔符,并尝试插入空行以了解效果。

如果您绝对必须删除文字文本之前或之后的空格,您可以使用一个技巧,将其分配给变量并输出该变量,或者将其转换为字符串文字:

use Template;

my $tt = Template->new;

my $input = <<'EOF';
[%- variable = 'bar' -%]
       [%- 'foo' -%]
       [%- variable -%]
EOF

$tt->process(\$input);

输出是字符串“foobar”,没有任何换行符。

可悲的事实是Template Toolkit 的空白处理能力非常有限。不仅具有带有连字符的分隔符版本,而且具有不同行为的其他分隔符版本(例如

[%=
[%|
)确实很有帮助,但如果不破坏与现有版本的严格兼容性,就无法实现。

顺便说一句,您在自己的代码中使用

-%]
,可能没有注意到它。

© www.soinside.com 2019 - 2024. All rights reserved.