当前位置:  开发笔记 > 编程语言 > 正文

如何包含Template :: Toolkit-宏?

如何解决《如何包含Template::Toolkit-宏?》经验,为你挑选了1个好方法。

这个问题是关于Template :: Toolkit(Perl)中宏的用法

我没有编写宏并将它们放入一个单独的文件中,以便在其他几个模板文件中使用它们.

我的宏位于名为macros.tt的单独模板文件中:

----- file macros.tt ------
[% MACRO decorateStatus(status) BLOCK -%]
    [% ico = 'status_unknown' -%]
    [% IF status == "New" -%][% ico = 'status_waiting' -%]
    [% ELSIF status == "Working" -%][% ico = 'status_work' -%]
    [% ELSIF status == "Deleted" -%][% ico = 'status_deleted' -%]
    [% END -%]
    [% status %] 
[% END-%]

现在我正在尝试在另一个模板中使用此宏 - 但是由于宏未展开而失败:

----- file demo.tt -------
[% INCLUDE macros.tt %]
….
[% status = ‘New’ %]
[% decorateStatus(status) %]
….

将宏直接放在我想要使用它的文件中,一切都按预期工作.

从不同文件中包含宏的"正确"方法是什么?



1> Dave Cross..:

使用时INCLUDE,所有变量定义(以及宏实际上只是一个奇特的变量)都被本地化为包含的文件.这意味着宏定义在包含文件之外是不可见的.

要使宏在调用文件中可见,您需要PROCESS代替INCLUDE.正如文件所说:

PROCESS指令类似于INCLUDE但在处理模板之前不执行任何变量本地化.对包含模板中的变量所做的任何更改都将在包含模板中可见.


我可以推荐[好书](http://shop.oreilly.com/product/9780596004767.do):-)
推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有