什麼是模板技術?
首先是我們有一個模板,按一定規則替換字符串中的內容,形成新的內容。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:
<head>head</head> 111
<head>head</head> 222
<head>head</head> 333
關於區塊
區塊裏面其實我最關心的是默認值,其他的就不怎麼關心了。就裏就介紹個默認值了。
{{#repo}} <b>{{name}}</b> {{/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>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其實也可以寫出擁有簡單邏輯的模板。不過我學這個主要是爲了看它是不是適用用來寫接口測試數據源的封裝,目前看來還行吧,適用於數據量大,自己又只想改少量數據的場景。感覺跟直接在代碼裏面用字符串封裝相比,它讓代碼更加好看了。