Freemarker:获取包含(前缀)的模板

Freemarker: getting a Template with include (prefix)

我正在尝试以下操作:

MainTemplate.ftl

<root>
  <#List items as item>
    <#include "custom_item.ftl">  [Option 1]
  </#List>  
  <#include "custom_item.ftl">    [Option 2]
</root>

custom_item.ftl

<root>
  <name>${name}</name>
</root>

在某些文件中,包含类似于 [选项 1],在其他文件中类似于 [选项 2]。 要访问 ${name} 变量,我必须使用两种不同的方式:

- Option 1: ${item.name}
- Option 2: ${name}

完全可以理解,但也是我的问题。我怎样才能确保它始终有效?就像为包含提供前缀一样,它总是一样的。

例如:

MainTemplate.ftl

<root>
  <#List items as item>
    <#include "custom_item.ftl" prefix='item'>  [Option 1]
  </#List>  
  <#include "custom_item.ftl">    [Option 2]
</root>

custom_item.ftl

<root>
  <# assign prefix = prefix?root>
  <name>${prefix.name}</name>
</root>

这样总能奏效。我的方法显然行不通,有人有可行的解决方案吗?

Edit: Answer included

MainTemplate.ftl

<root>
  <#List listItems as listItem>
    <#assign item = listItem>
    <#include "custom_item.ftl">  
  </#List>  
  <#assign item = .data_model>
  <#include "custom_item.ftl">    
</root>

custom_item.ftl

<root>
  <name>${item.name}</name>
</root>

始终使用 ${item.name}。在数据模型根本身就是项目的情况下(是吗?),您可以在 #include.

之前执行类似 <#assign item = .data_model> 的操作