从不同文件调用 freemarker 宏

Call freemarker macro from different file

我有这样的情况。我有文件夹 a,里面有 a.ftl 和文件夹 b。在文件夹 b 中有 b.ftl。在 b.ftl 我有 [#macro macroName param1]...[/#macro] 如何从文件 a 调用宏?我有 intellij idea 警告。我看到这个 link https://intellij-support.jetbrains.com/hc/en-us/community/posts/206196939-Getting-Intellij-to-pick-up-Freemarker-macros 所以我试着把

[#-- @implicitly included --]
[#-- @ftlroot "" --]

a.ftl 的顶部,但它不起作用。我正在查看 freemarker 文档 http://freemarker.org/docs/ref_directive_macro.html 但是有一个例子只是从同一个文件调用宏。

你可以使用<#import "/b/b.ftl" as b>(最后一个b可以是任何变量名),然后你可以像<@b.macroName ...>一样调用宏。将通常需要的 macros/functions/values 放入在其他模板中 #import 编辑的模板中是常见的最佳做法。

你也可以在/a/a.ftl中使用<#include "/b/b.ftl">,然后你可以只使用<@macroName ...>(没有像b.那样的命名空间前缀)。然而,#include 的常见用例是打印公共输出,因为它执行整个 a.ftl,每次它是 #include-d。如果 a.ftl 仅包含宏定义和其他可能无关紧要的此类赋值。

导入和包含也可以在最顶层模板中自动执行。为此,请参阅 auto_imports (Configuration.setAutoImports) 和 auto_includes (Configuration.setAutoIncludes) 配置设置。

另请参阅:http://freemarker.org/docs/dgui_misc_namespace.html