我使用< #include>将外部静态FTL文件(从存储库)包含到我的项目FTL中指令如下。但我无法插入此FTL。有人可以指导我如何包含外部URL。
<#include "http://{domain}/file.ftl" />
错误:java.io.FileNotFoundException:Template&#34; http:// {domain} /file.ftl"未找到。
答案 0 :(得分:1)
每次需要加载模板时(对于#include
或Configuration.getTemplate
等),FreeMarker会调用TemplateLoader
的{{1}}来执行此操作(除非模板已经在缓存中了。由Configuration
来解释地址并实际加载模板。包含TemplateLoader
来自TemplateLoader
地址的加载没有http:
,因此您需要创建一个自定义TemplateLoader
实现。然后将templateLoader
配置设置设置为它。
答案 1 :(得分:0)
想象有 1个父母和 2个孩子;
可能需要处理的情况:
我的回答涵盖了两个方面: 在父级中,我们导入两个子级,并创建一个名为“ Path”的存储变量:
<#import "breadcrumbs.ftl" as breadcrumbs>
<#macro breadCrumbs path=[]>
<@breadcrumbs.breadcrumbs path=path/>
</#macro>
<#macro wrap>
<!doctype html>
<html lang="en">
<div id="breadcrumbs">
</html>
</#macro>
第一个孩子,我们将其定义为面包屑,并放置在 div#breadcrumbs
<#macro breadcrumbs path=[]>
<#assign totalpath=["{'name': 'Home', 'url': '${appContext}/'}"] + path/>
<script type="module">
import {BreadCrumbs} from "${appContext}/_app/jsx/breadcrumbs.js";
new BreadCrumbs({
"containerID": "breadcrumbs",
"path": [<#list totalpath as p>${p}, </#list>],
});
</script>
</#macro>
第二个孩子是
<#import "./admin-layout.ftl" as layout>
<@layout.wrap>
<@layout.breadCrumbs path = ["{'name': 'Models', 'url':'${appContext}/admin/model'}"]/>
<div>some other comntent</div>
</@layout.wrap>
结论:第一个孩子将面包屑添加到源页面,第二个孩子将剩余的面包屑推到路径
结果是: