#template-toolkit
#template-toolkit
Вопрос:
Хорошо, я просматривал руководство уже более двух часов, также пытался найти решение в книге badger, но не смог придумать ничего, что работало бы.
Ниже приведена оболочка ( 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.tt
без необходимости добавлять другую PROCESS 'const.tt'
к этому шаблону. В конце концов, переменная должна быть доступна с body.tt
.
И я забыл упомянуть: Template Toolkit версии 2.22
Ответ №1:
Вот почему то, что вы пробовали, не работает.
Как 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' %]
Пока это работает, я не даю никаких обещаний относительно здравомыслия человека, который должен поддерживать его позже.
Комментарии:
1. прежде всего, спасибо за объяснение. 1. Поскольку это доказывает, что нет способа заставить это работать, я также присужду вам награду и соглашусь.