Template Toolkit:评估WRAPPER块内的模板语句?

时间:2011-04-21 20:25:26

标签: template-toolkit

好吧,我现在已经查看了两个多小时的手册,也尝试在獾书中找到一个解决方案,但无法提出任何有效的方法。

以下是包装器(body.tt),你明白了这个想法:

[%- PROCESS 'const.tt' -%]
<?xml version="1.0" encoding="utf-8"?>
Loads of HTML
[%- content -%]
More HTML

包装的模板如下所示:

[% WRAPPER 'body.tt' %]
Other HTML
[%- bar -%]
More other HTML
[% END %]

最后const.tt看起来像这样:

[% bar = 'foo' %]

...由于某种原因,不会评估包装模板中bar的实例。我有什么想法可以评估它?

我试过了:

[%- content | eval -%]

......哪些不起作用。

注意,在包装模板(上面的第二个块)中,我希望能够从bar评估变量const.tt,而不必向该模板添加另一个PROCESS 'const.tt'。所有变量都应该来自body.tt

我忘了提及:Template Toolkit 2.22版本

1 个答案:

答案 0 :(得分:2)

这就是为什么你尝试的不起作用。

正如http://template-toolkit.org/docs/manual/Directives.html#section_WRAPPER所述,首先评估您的包装内容,然后使用已作为body.tt传入的已评估模板处理content。因此content在加载content.tt之前完成。

那说,有办法做到这一点,但它有点难看。这是您的内容:

%- PROCESS 'body.tt' -%]
[%- WRAPPER body -%]
Other HTML
[%- bar -%]
More other HTML
[% END %]

以下是body.tt

[%- PROCESS 'content.tt' -%]
[% BLOCK body -%]
<?xml version="1.0" encoding="utf-8"?>
Loads of HTML
[%- content -%]
More HTML
[% END -%]

并且content.tt没有改变:

[% bar = 'foo' %]

虽然这是有效的,但我不会对那些必须在以后维护它的人的理智做出承诺。