2

さて、私は2時間以上マニュアルを調べ、アナグマの本で解決策を見つけようとしましたが、うまくいくものを思い付くことができませんでした。

以下はラッパー(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 -%]

...動作しませんでした。

ラップされたテンプレート(上記の2番目のブロック)では、そのテンプレートに別の変数を追加しなくても、barから変数を評価できるようにしたいことに注意してください。結局のところ、変数はから利用可能であるはずです。const.ttPROCESS 'const.tt'body.tt

そして私は言及するのを忘れました:テンプレートツールキットバージョン2.22

4

1 に答える 1

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' %]

これは機能しますが、後でそれを維持しなければならない人の正気については約束しません。

于 2011-04-29T06:46:48.223 に答える