首先是我们有一个模板,按一定规则替换字符串中的内容,形成新的内容。mustache是对任何的字符串类型,文本类型的数据进行模板替换的技术。由于它是对文本进行处理,不在乎数据的格式,不管是yaml,json都可以。
mustache的官方给出的含义是logic-less template,意思是逻辑很少的模板。
它支持的语法大概有以下几种。
mustache是通过检索标签来进行替换的。它的标签分为两类:
{ {variable}} :变量,检索替换即可
{ {#variable}}: 区块,支持其他替换次数,默认值,lambda等功能。
变量默认会进行html转义。如果不想进行html转义,就使用{ { {}}}或者{ {&}}模式。为什么会有这个默认转义,我猜是因为mustache最开始是是来源于js的。
{ {variable}}
{ { {variable}}}
{ { {&variable}}}
以下是一个使用例子
tempalte:
{ {name}} 111
{ { {name}}} 222
{ {&name}} 333
variable:
name: "
head"
result:
<head>head</head> 111
head 222 head 333
区块里面其实我最关心的是默认值,其他的就不怎么关心了。就里就介绍个默认值了。
{ {#repo}} { {name}} { {/repo}} { {^repo}} No repos :( { {/repo}}
传入数据:
{ "repo": [] }
如果不传入数据,或者传入的repo是空,则会输出
No repos :(
参考
有兴趣的小伙伴可以在下面找参考文档
官方语法翻译
https://blog.csdn.net/cnhome/article/details/80516735
这个博客翻译得全。不过感觉个别人地方翻译得也不是很好但是结合例子,相信大家可以看懂,实在看不懂的,看官方原文吧。更清晰。
http://mustache.github.io/mustache.5.html
以下,用起来还是很简单的。
----------
@Test
public void mustacheNormalTest2(){
String nameNew = "
head";
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其实也可以写出拥有简单逻辑的模板。不过我学这个主要是为了看它是不是适用用来写接口测试数据源的封装,目前看来还行吧,适用于数据量大,自己又只想改少量数据的场景。感觉跟直接在代码里面用字符串封装相比,它让代码更加好看了。