一、核心作用
Velocity 模板引擎通过 #include / #parse 实现模板复用。
网页通用部分(页面头部导航_head.htm、底部版权_footer.htm)抽离为独立子模板,在页面中引入,避免多处重复编写HTML。
二、两者核心区别
1. #include("文件路径")
单纯把文件原文原样输出,不会解析子模板中的Velocity变量($!{xxx})
- 子模板内的
$!{testinclude}不会被渲染,直接原样输出字符串$!{testinclude} - 支持一次性传入多个文件:
#include("a.htm","b.htm") - 适合:纯静态HTML、不含任何VTL变量的静态片段
2. #parse("文件路径")
引入子模板并完整解析Velocity语法,父模板传递的变量可以在子模板中正常渲染
- 子模板里的
$!{testinclude}会读取上下文变量,替换成后端传入的值 - 只能接收单个文件路径,不支持同时引入多个文件
- 适合:头部、底部这类包含变量的公共模板(页面标题、版权动态信息等)
对应你截图笔记原文:
#include只是单纯的把子模板的代码加入到主模板里面,而不会解析,而#parse则会解析
三、案例演示
1. 后端代码(.cs)
context.Put("testinclude", "子模板的文字:");Code language: JavaScript (javascript)
2. 子模板 _footer.htm 内容
版权信息 $!{testinclude}
场景① 使用 #include("./themes/default/_footer.htm")
页面输出结果:
版权信息 $!{testinclude}
变量没有被解析,原样打印占位符。
场景② 使用 #parse("./themes/default/_footer.htm")
页面输出结果:
版权信息 子模板的文字:
变量成功渲染,这也是项目中头部、底部通用模板优先使用#parse的原因。
四、使用场景推荐
| 指令 | 适用场景 |
|---|---|
#include | 静态资源、纯文本、静态HTML片段,不需要变量渲染 |
#parse | 公共头部、底部、侧边栏;子模板内存在$变量、#if等VTL语法 |
💡 开发规范:
页面导航、底部版权这类大概率需要动态变量的公共组件,统一使用#parse;纯静态文本、样式片段使用#include。