mojavy.com

mustache基礎文法最速マスター

October 01, 2013 at 12:08 AM | categories: ruby, mustache |

mustache

mustacheはシンプルなテンプレートエンジンなので本家の英語マニュアル mustache(5) を見ても大したことはないですが、日本語情報の需要もそれなりにあると思うのでまとめておきます。

以下の内容はrubygemのmustache-0.99.4で確認しています。 他の言語の場合は適宜置きかえてください。

目次

変数の展開

{{name}}のように2つのブレースで囲ったタグは、nameという名前のキーの値でおきかえられます。

対応するキーが見つからなかった場合はデフォルトでは空文字になります。

Mustache.render("Hello, {{world}}!", world: "mustache") # => "Hello, mustache!"
Mustache.render("{{no_such_key}}") # => ""

変数のエスケープ

デフォルトではHTMLエスケープが有効になります。アンエスケープされたHTMLが使いたい場合は{{{name}}}のように3つのブレースで囲います。

Mustache.render("{{html}}",  html: "<b>GitHub</b>") # => "&lt;b&gt;GitHub&lt;/b&gt;"
Mustache.render("{{{html}}}", html: "<b>GitHub</b>") # => "<b>GitHub</b>"

条件分岐

{{#name}} ... {{/name}}のように、2つのタグに#/をそれぞれつけたタグで囲われたブロックはセクションといいます。

セクションのキーに対応する値にbool値を渡せばif文のような使い方ができます。 #のかわりに^をつかうと真偽を反転できます。

template = <<DOC
{{#condition}}
It is true.
{{/condition}}
{{^condition}}
No not true.
{{/condition}}
DOC
Mustache.render(template, condition: true) # => "It is true.\n"
Mustache.render(template, condition: false) # => "No not true.\n"

ループ

セクションのキーに対応する値に配列を渡した場合は、それぞれの要素を引数として中のブロックが繰り返し評価されます。

template = <<DOC
{{#animals}}
{{name}}
{{/animals}}
DOC
data = {animals: [{name: "cat"}, {name: "dog"}, {name: "pig"}]}
Mustache.render(template, data) # => "cat\ndog\npig\n"

無名関数 (Lambda)

セクションのキーに対応する値に呼び出し可能なオブジェクトを渡した場合は、そのブロック内のテキストを引数として実行され、その返り値が結果として出力されます。

template = <<DOC
{{#proc}}
mojavy is bad
{{/proc}}
DOC
Mustache.render(template, proc: ->text{text.gsub(/bad/, 'nice')}) # => "mojavy is nice\n"

コメント

!をつけるとコメントになります

Mustache.render("Comment here: {{! ignore me }}") # => "Comment here: "

まとめ

mustacheの基本的な機能について簡単なサンプルコードとともに解説しました。 ここではrubyのmustacheを使用しましたが、他の言語でも同様の機能が使えます。 一部の機能については省略しているので、より詳細な情報については本家ドキュメントを参照してください。


blog comments powered by Disqus

About Me

pic
mojavy

Recent posts






Categories



Badges