Freemarker模板双重继承(child extends parent extends grandparent)

Freemarker templates double inheritence (child extends parent extends grandparent)

在 Freemarker 中,如何创建一个继承自本身继承的模板的模板?

单继承<#nested> 标签一起工作:

文件base.ftl:

<#macro layout>
<html lang="en">
  <head>...</head>
  <body>
    <div>... (navigation bar)</div>
    <div class="container">
      <#nested>
    </div>
  </body>
</html>
</#macro>

文件normalBase.ftl:

<#import "base.ftl" as base>

<@base.layout>
  <div class="row">
    <div class="col-md-9">
      ${content.body}
    </div>
    <div class="col-md-3">
       <p>Latest releases</p>
       <ul>....</ul>
    </div>
  </div>
</@base.layout>

如何将其转换为 双重继承 其中 useCaseBase.ftl 扩展 normalBase.ftl 扩展 base.ftl

这很有魅力:

文件base.ftl:

<#macro layout>
<html lang="en">
  <head>...</head>
  <body>
    ... // Shared navigation bar
    <div class="container">
      <#nested>
    </div>
    ... // Shared footer
  </body>
</html>
</#macro>

<@layout>
  ${content.body}
</@layout>

文件normalBase.ftl:

<#import "base.ftl" as parent>

<#macro layout>
    <@parent.layout>
        <div class="row">
            <div class="col-md-9">
                <#nested>
            </div>
            <div class="col-md-3">
                ... // Shared sidebar
            </div>
        </div>
    </@parent.layout>
</#macro>

<@layout>
    ${content.body}
</@layout>

文件useCaseBase.ftl:

<#import "normalBase.ftl" as parent>

<@parent.layout>
    ${content.body}
    ... // Shared content between all use case pages
</@parent.layout>

现在,我可以创建 *.adoc 个页面,其中 jbake-type 设置为 basenormalBaseuseCaseBase,并且它有效。