Mustache模板引擎

Mustache是一个Logic-Less模板引擎,即:零逻辑引擎,原因在于它只有标签,没有流程控制语句,这是它与其它模板引擎不同的地方。
Mustache小巧玲珑,几乎用各种语言都实现了一遍。

Mustache的用途

不仅仅用于HTML页面渲染,也可以用于配置文件、XML渲染等各种文本文件。

第一个例子

一个典型的mustache文件如下:

Hello {{name}}
You have just won {{value}} dollars!
{{#in_ca}}
Well, {{taxed_value}} dollars, after taxes.
{{/in_ca}}

给定一个哈希表:

{
  "name": "Chris",
  "value": 10000,
  "taxed_value": 10000 - (10000 * 0.4),
  "in_ca": true
}

将会产生如下结果:

Hello Chris
You have just won 10000 dollars!
Well, 6000.0 dollars, after taxes.

Mustache只有5种标签,就是这么简单

变量标签

{{username}}
默认情况下,username中的<等符号会被转义为&lt;
防止转义使用{{&username}}或者使用{{{username}}}

区块标签

{{#sectionVariable}}
这里是区块
{{/sectionVariable}}

区块变量可以取四种数据类型:
1、 false或者空数组:不显示区块内容
2、 非空数组:表示迭代数组中的每一项

Template:

{{#repo}}
  <b>{{name}}</b>
{{/repo}}
Hash:

{
  "repo": [
    { "name": "resque" },
    { "name": "hub" },
    { "name": "rip" }
  ]
}
Output:

<b>resque</b>
<b>hub</b>
<b>rip</b>

如果区块直接是一个字符串列表

View:

{
  "musketeers": ["Athos", "Aramis", "Porthos", "D'Artagnan"]
}
Template:

{{#musketeers}}
* {{.}}
{{/musketeers}}

结果:
* Athos
* Aramis
* Porthos
* D'Artagnan

3、函数:调用一次函数

Template:

{{#wrapped}}
  {{name}} is awesome.
{{/wrapped}}
Hash:

{
  "name": "Willy",
  "wrapped": function() {
    return function(text, render) {
      return "<b>" + render(text) + "</b>"
    }
  }
}
Output:

<b>Willy is awesome.</b>

4、字典类型:控制上下文

Template:

{{#person?}}
  Hi {{name}}!
{{/person?}}
Hash:

{
  "person?": { "name": "Jon" }
}
Output:

Hi Jon!

反转区块标签:用于实现else结构

Template:

{{#repo}}
  <b>{{name}}</b>
{{/repo}}
{{^repo}}
  No repos :(
{{/repo}}
Hash:

{
  "repo": []
}
Output:

No repos :(

注释标签

{{!这里随便写点注释}}

包含标签

{{>head.mustache}}
Mustache的包含是动态包含,而不是简单地复制粘贴。

我所知道的其它模板引擎

java模板引擎

freemarker
velocity
beetl
smarty4j
httl

各种语言:
mustuche

参考资料

官方文档
Python版
Java版

原文地址:https://www.cnblogs.com/weiyinfu/p/7087543.html