【问题标题】:How do I include something only if it hasn't already been included in FreeMarker?仅当 FreeMarker 中尚未包含某些内容时,我如何才能包含它?
【发布时间】:2017-01-08 05:13:23
【问题描述】:

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

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

【问题讨论】:

    标签: freemarker


    【解决方案1】:

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

    <#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' />
    

    【讨论】:

      猜你喜欢
      • 2011-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多