mustache模板技术初识

什么是模板技术?

首先是我们有一个模板,按一定规则替换字符串中的内容,形成新的内容。mustache是对任何的字符串类型,文本类型的数据进行模板替换的技术。由于它是对文本进行处理,不在乎数据的格式,不管是yaml,json都可以。
 

支持什么语法?

mustache的官方给出的含义是logic-less template,意思是逻辑很少的模板。
它支持的语法大概有以下几种。
  • 变量替换
  • 区块单次或多次替换
  • 变量不存在时,设默认值
  • 传入lambda函数,以实现对字符串简单的操作
  • 支持mustache中引用mustache,以实现模板的复用。
  • 修改{{}}分隔符
 

部分语法讲解

标签分类

mustache是通过检索标签来进行替换的。它的标签分为两类:
{{variable}} :变量,检索替换即可
{{#variable}}: 区块,支持其他替换次数,默认值,lambda等功能。
 

关于变量

变量默认会进行html转义。如果不想进行html转义,就使用{{{}}}或者{{&}}模式。为什么会有这个默认转义,我猜是因为mustache最开始是是来源于js的。
{{variable}}
{{{variable}}}
{{{&variable}}}
以下是一个使用例子
tempalte:
{{name}} 111
{{{name}}} 222
{{&name}} 333
 
variable:
name: "<head>head</head>"
 
result:
&lt;head&gt;head&lt;/head&gt; 111
<head>head</head> 222
<head>head</head> 333
 

关于区块

区块里面其实我最关心的是默认值,其他的就不怎么关心了。就里就介绍个默认值了。
{{#repo}} <b>{{name}}</b> {{/repo}} {{^repo}} No repos :( {{/repo}}
传入数据:
{ "repo": [] }
如果不传入数据,或者传入的repo是空,则会输出
No repos :(
 
 

参考

有兴趣的小伙伴可以在下面找参考文档
官方语法翻译
这个博客翻译得全。
不过感觉个别人地方翻译得也不是很好但是结合例子,相信大家可以看懂,实在看不懂的,看官方原文吧。更清晰。
 

简单的使用示例

以下,用起来还是很简单的。
----------
@Test
public void mustacheNormalTest2(){
String nameNew = "<head>head</head>";
 
 
HashMap<String, Object> data = new HashMap<>();
data.put("name", nameNew);
 
Writer writer = new StringWriter();
MustacheFactory mf = new DefaultMustacheFactory();
Mustache mustache = mf.compile("test.mustache");
mustache.execute(writer, data);
try {
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(writer.toString());
}
-----------
template
-----
{{name}} 111
{{{name}}} 222
{{&name}} 333
-----
 

总结

mustcahe也算是支持一些语法,可以满足模板的要求,也可以对模板进行封装,还支持一定的逻辑。mustache其实也可以写出拥有简单逻辑的模板。不过我学这个主要是为了看它是不是适用用来写接口测试数据源的封装,目前看来还行吧,适用于数据量大,自己又只想改少量数据的场景。感觉跟直接在代码里面用字符串封装相比,它让代码更加好看了。
 
 

猜你喜欢

转载自www.cnblogs.com/ximixuexi/p/12818319.html