好吧,我现在已经查看了两个多小时的手册,也尝试在獾书中找到一个解决方案,但无法提出任何有效的方法。
以下是包装器(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版本
答案 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' %]
虽然这是有效的,但我不会对那些必须在以后维护它的人的理智做出承诺。