我在最近的Template::Toolkit项目中使用了Catalyst,并设置了一个我喜欢使用的设置,该设置可以使模板完全分离。现在,我希望使用Text::Xslate,但是我无法确定是否可以进行相同的设置。以下是我通常用于Template::Toolkit的内容。

__PACKAGE__->config({
    ...
    WRAPPER      => 'site/wrapper',
    ...
});

包装器
[% content WRAPPER site/html + site/layout %]

html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
  <title>[% template.title or site.title %]</title>
  <style type="text/css">
  </style>
 </head>
 <body>
[% content %]
 </body>
</html>

布局
<div id="header">[% PROCESS site/header %]</div>

<div id="content">
[% content %]
</div>

<div id="footer">[% PROCESS site/footer %]</div>`

然后页眉和页脚具有它们自己的内容。我喜欢这种解决方案,因为所有内容都清晰地分开了,并且不必通过将开始标签放在页眉中并将结束标签放在页脚中来拆分内容周围的任何div标签。看起来像TTerse语法中有一些包装器功能,但是我不确定这是否允许我重新创建平时的工作。我还发现this answer表示您可以在理论上使用包装器,但实际上并没有给出任何示例。

最佳答案

指令WRAPPER在TTerse中的工作方式与在TT2中略有不同。此基本语法有效:

[% WRAPPER "include/layout.tt" WITH
   title = "Lipsum" %]

Magna in et vel: feugait erat augue, ut accumsan wisi hendrerit,
eu amet laoreet duis. Duis ex nonummy te lorem blandit et velit
tation erat amet elit dignissim.

[% END %]

并且是include/layout.tt
# [% title %]

[% content %]

----
Commodo quis magna feugiat ullamcorper, exerci tation ut.

尽管TTerse不支持BLOCK。

TTerse的文档实际上足够好,并且包含许多可行的示例:https://metacpan.org/pod/Text::Xslate::Syntax::TTerse#Functions-and-filters

07-25 20:25