freemarker - 使用 FreeMarker 包含模板时保持缩进
问题描述
当我包含一个带有<#include ...>
指令的模板时,该模板的内容从第 0 列开始插入,而不是include
标签所在的位置。是否可以告诉 FreeMarker 尊重缩进?
解决方案
您可以使用宏并将缩进作为参数传递给它们。例如,考虑构建一个 YAML 格式的课程列表,其中每个课程都有一个学生列表。
报告.ftl:
<#include "course.ftl" parse=true>
<#include "faculty.ftl" parse=true>
<#include "student.ftl" parse=true>
<#list report as course>
<@newCourse course = course indent = 0/>
</#list>
课程.ftl:
<#include "faculty.ftl" parse=true>
<#include "student.ftl" parse=true>
<#macro newCourse course indent>
<#local padding = ""?left_pad(4*indent)/>
${padding}course:
${padding} code: ${course.code}
${padding} name: ${course.name}
<@newFaculty code = "${course.faculty.code}" name = "${course.faculty.name}" indent = indent + 1/>
${padding} students:
<#list course.students as student>
<@newStudent code = "${student.code}" name = "${student.name}" indent = indent + 2/>
</#list>
</#macro>
教师.ftl:
<#macro newFaculty code name indent>
<#local padding = ""?left_pad(4*indent)/>
${padding}faculty:
${padding} code: ${code}
${padding} name: ${name}
</#macro>
学生.ftl:
<#macro newStudent code name indent>
<#local padding = ""?left_pad(4*indent)/>
${padding}- student:
${padding} code: ${code}
${padding} name: ${name}
</#macro>
宝约:
class Course {
private String code;
private String name;
private Faculty faculty;
private List<Student> students = new ArrayList<>();
}
class Faculty {
private String code;
private String name;
}
class Student {
private String code;
private String name;
}
推荐阅读
- mysql - 使用子选择和 order() 和 sum() 我可以让它显示第二个订单吗?
- javascript - 无法在 ReactJS 中显示获取的 api 数据
- c - C中最大+第二大数
- angular - 离子自定义弹出窗口
- android - 启动 singleTask 活动会导致它在调用者任务之上产生
- javascript - 找到数组中给定元素的下一个最高位置
- flutter - 如何将数组数据添加到 Firestore
- java - 如何使用 FOR 循环在 1 行上打印逗号分隔列表,最后一个数字结尾没有逗号/空格/换行符?
- machine-learning - 运行 keras 模型 VGG16,InceptionV3 总是出现 ValueError 错误:形状 (None, 1) 和 (None, 8, 8, 5) 不兼容
- kotlin - 在 Kotlin 中迭代单例属性的正确方法是什么?