如果尚未包含在FreeMarker中,我该如何包含某些内容?

时间:2017-01-08 05:13:24

标签: freemarker

PHP有一个函数include_once('target'),它包含target,但前提是它还没有被包含。 freemarker有这样的东西吗?

Include Once通过不必使用代码处理依赖项来防止错误。我有一堆shell脚本来安装我正在模板化的应用程序。当我使用scala导入,并希望能够在模板中声明它对java有依赖性,但是如果已经包含hadoop模板,那么它已经包含了java。无需两次包含java安装脚本。 freemarker可以这样做吗?

1 个答案:

答案 0 :(得分:2)

内置没有这样的指令,但只要你不至少使用相对路径就可以用宏来模拟它:

<#global incuded = {}>

<#macro includeOnce path>
  <#if !path?startsWith('/')>
    <#stop "The path must start with /">
  </#if>
  <#if incuded[path]??><#return></#if>
  <#include path>
  <#global incuded += {path: true}>
</#macro>

然后:

<@includeOnce '/something.foo' />