You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Freemaker中是否有语法可引入已定义字段至新配置条目?

在Freemarker中复用processor_tool字段到processor_all

问题场景

现有FTL文件内容如下:

{
  <#-- processor_tool is an existing field -->
  "processor_tool" : {
    <#if Trigger?has_content>
     "vendor_trigger": "${VendorTrigger}"
    </#if>
   ...
  },

<#-- processor_all is new entry to the ftl file -->
 "processor_all" : {
   "timeout" : "${timeout}"
   <#-- add all fields from "processor_tool" declared above -->
 }
}

需要为新增的processor_all条目添加新字段的同时,复用processor_tool中的所有字段,避免复制粘贴导致的重复代码问题。

解决方案:使用Freemarker宏(Macro)实现复用

通过定义宏封装processor_tool的字段逻辑,让processor_tool和processor_all都调用这个宏,实现代码复用,符合DRY原则。

步骤1:定义封装字段的宏

在FTL文件合适位置(比如开头)定义宏,把processor_tool内的字段逻辑放入其中:

<#macro processorToolFields>
  <#if Trigger?has_content>
   "vendor_trigger": "${VendorTrigger}"
  </#if>
  ... <!-- 其他processor_tool的字段 -->
</#macro>

步骤2:在processor_tool中调用宏

修改原processor_tool的代码,用宏调用替代原字段声明:

"processor_tool" : {
  <@processorToolFields />
},

步骤3:在processor_all中调用宏并添加新字段

在processor_all中先添加自定义新字段,再调用宏引入processor_tool的所有字段:

"processor_all" : {
  "timeout" : "${timeout}",
  <@processorToolFields />
}

补充方案:使用include引入片段文件

如果字段逻辑复杂,也可以把processor_tool的字段内容单独放到一个FTL片段文件(比如processor_tool_fields.ftl)中,然后在两处通过<#include>引入:

<!-- processor_tool中引入 -->
"processor_tool" : {
  <#include "processor_tool_fields.ftl">
},

<!-- processor_all中引入 -->
"processor_all" : {
  "timeout" : "${timeout}",
  <#include "processor_tool_fields.ftl">
}

两种方案都能实现代码复用,后续修改processor_tool的字段时,只需修改宏或片段文件的内容,两处会自动同步,避免重复修改。

内容的提问来源于stack exchange,提问作者adarsh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 19:06:27