mustache 模板引擎

mustache 模板只包含标签,不包含逻辑(比如,if-else 语句、for 循环)。

标签是用双花括号表示,比如:{{person}}, {{#person}},下面介绍不同类型的标签。

Variables

变量 {{name}} 是最基础的标签,它会在当前上下文查找键为 name 的值。如果没有找到,则递归地在父上下文查找,缺失则返回空字符串。

所有变量默认都会进行 HTML 转义,如果想禁止转义,可以使用 {{{name}}}{{&name}}

Sections

Sections 会将文本渲染一次或多次。

Sections 由 {{#person}} 开始, {{/person}} 结束。

  • 如果 person 不存在,或是 false 或空列表,则块中的 HTML 不会被渲染
  • 如果 person 是一个列表,则列表中的元素都会被渲染
  • 如果 person 是一个非 false 的值,则该值会被渲染一次

Inverted Sections

Inverted Sections 由 {{^person}} 开始,{{/person}} 结束。

如果 person 不存在,或是 false 或空列表,则块中的 HTML 会被渲染。

注释

注释 {{! ignore me }}

Partials

Partials {{> user}} 会将 user.mustache 模板的内容渲染到当前位置。

Set Delimiter

Set Delimiter 可以重新定义标签。

  • {{=<% %>=}} 将标签重定义成 <% name %>
  • <%={{ }}=%> 将标签恢复成默认样式 {{ name }}

jmustache 模板引擎

<!-- https://mvnrepository.com/artifact/com.samskivert/jmustache -->
<dependency>
    <groupId>com.samskivert</groupId>
    <artifactId>jmustache</artifactId>
    <version>1.15</version>
</dependency>
String text = "One, two, {{three}}. Three sir!";
Map<String, String> data = new HashMap<String, String>();
data.put("three", "five");

Template tmpl = Mustache.compiler().compile(text);
System.out.println(tmpl.execute(data));
// result: "One, two, five. Three sir!"
void executeTemplate (Reader template, Writer out, Map<String, String> data) {
   Mustache.compiler().compile(template).execute(data, out);
}

参阅

posted @ 2022-07-07 23:41  廖子博  阅读(325)  评论(0编辑  收藏  举报