模板复用

一、核心作用

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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注