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>") # => "<b>GitHub</b>" 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"
セクションのキーに対応する値に呼び出し可能なオブジェクトを渡した場合は、そのブロック内のテキストを引数として実行され、その返り値が結果として出力されます。
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を使用しましたが、他の言語でも同様の機能が使えます。 一部の機能については省略しているので、より詳細な情報については本家ドキュメントを参照してください。
]]>