ロジックレス・テンプレート Mustache マニュアル


Pocket

githubにあったロジックレス・テンプレート Mustacheのマニュアルを翻訳しました。


mustache(5)

  1. mustache(5)
  2. Mustache Manual
  3. mustache(5)

NAME

mustache — ロジックレステンプレート.

SYNOPSIS

一般的な Mustache のテンプレート:

Hello {{name}}
You have just won ${{value}}!
{{#in_ca}}
Well, ${{taxed_value}}, after taxes.
{{/in_ca}}

以下のハッシュを与えると:

{
  "name": "Chris",
  "value": 10000,
  "taxed_value": 10000 - (10000 * 0.4),
  "in_ca": true
}

次のような文字列を生成します:

Hello Chris
You have just won $10000!
Well, $6000.0, after taxes.

DESCRIPTION

MustacheはHTMLや設定ファイル、ソースコード等どのようなものに使用することができます。Mustacheはハッシュかオブジェクトの中で提供される値を使用して、テンプレート中のタグを拡張することにより作動します。

if,elseやforループの構文を持たないので私たちはこれを”logic-less”と呼びます。
その代わりとしてタグだけがあります。
いくつかのタグは値や空値その他の一連の値に置き換えられます。
このドキュメントはMustacheの異なるタイプのタグについてを説明します。

TAG TYPES

タグは2重の中括弧で表します。{{person}}はタグです。{{#person}} もタグです。
どちらの例においても、personをキーまたはタグ・キーと呼びます。
異なるタイプのタグについて話しましょう。

Variables

最も基本的なタグタイプは変数です。基本的なテンプレートにおける{{name}}タグはコンテキスト中からnameキーを探そうとします。
もしnameキーがなければ何も表示されません。

全ての変数はデフォルトでHTMLエスケープが行われます。
もしエスケープしていないHTMLを返したい場合は3重の中括弧を使用します。例) {{{name}}}.

エスケープ回避に&を使うこともできます。例){{& name}}.
こちらはデリミタを変更している場合に便利でしょう。 (後述の “Set Delimiter” を参照).

デフォルトでは一致する変数が存在しない場合に空文字を返します。
この動作について通常はMustacheライブラリで設定することができます。
Ruby版のMustacheはこのような場合に例外の送出をサポートしています。

Template:

* {{name}}
* {{age}}
* {{company}}
* {{{company}}}

Hash:

{
  "name": "Chris",
  "company": "<b>GitHub</b>"
}

Output:

* Chris
*
* &lt;b&gt;GitHub&lt;/b&gt;
* <b>GitHub</b>

Sections

セクションはコンテキスト中のキーがもつ値によってテキストブロックを1回または複数回表示します。

セクションは#で始まりスラッシュの付いた閉じタグで終わります。
すなわち、{{#person}}はpersonセクションを始めます。そして{{/person}}はそれを終了しています。

セクションの振る舞いはキーに設定された値によって決定されます。

False または 空のリスト

もしpersonキーがFalse または 空のリストを値としてもっていれば、タグの開始から終了までのHTMLは表示されません。

Template:

Shown.
{{#nothin}}
  Never shown!
{{/nothin}}

Hash:

{
  "person": true,
}

Output:

Shown.

空ではないリスト

もしpersonキーが空ではないリストを値としてもっていた場合、そのテキストブロックは1回またはリストが持つアイテムの数だけ表示されます。

ブロックのコンテキストリストのeachイテレーションに対してカレントのアイテムをセットします。
この方法でコレクションをループ処理することができます。

Template:

{{#repo}}
  <b>{{name}}</b>
{{/repo}}

Hash:

{
  "repo": [
    { "name": "resque" },
    { "name": "hub" },
    { "name": "rip" },
  ]
}

Output:

<b>resque</b>
<b>hub</b>
<b>rip</b>

ラムダ

値が関数やラムダ式のような呼び出し可能なオブジェクトの場合は、オブジェクトはinvokeされ、そしてテキストブロックを渡します。
渡されたテキストは表示されないリテラルブロックです。
{{tags}}は拡張しません。ラムダはそれ自体を拡張するべきです。
この方法でフィルタやキャッシュを実装できます。

Template:

{{#wrapped}}
  {{name}} is awesome.
{{/wrapped}}

Hash:

{
  "name": "Willy",
  "wrapped": function() {
    return function(text) {
      return "<b>" + render(text) + "</b>"
    }
  }
}

Output:

<b>Willy is awesome.</b>

Falseでない値

値がFalseでなく、且つリストでもない場合、それはブロックを1回表示するコンテキストとして使用されます。

Template:

{{#person?}}
  Hi {{name}}!
{{/person?}}

Hash:

{
  "person?": { "name": "Jon" }
}

Output:

Hi Jon!

Inverted Sections

負のセクションはキャレット(^)で始まり、スラッシュで終わります。
つまり{{^person}} は”person”負のセクションを開始し、{{/person}}はそれを終了します。

セクションがキーの値によってテキストを1回または複数回表示するのに使用されるのに対して、負のセクションはキーの値の逆値によってテキストを1回表示します。
すなわちキーが存在しない、またはFalseであるか空のリストの場合に表示されます。

Template:

{{#repo}}
  <b>{{name}}</b>
{{/repo}}
{{^repo}}
  No repos :(
{{/repo}}

Hash:

{
  "repo": []
}

Output:

No repos :(

Comments

コメントは!で始まり、表示上は無視されます。以下のテンプレートは

<h1>Today{{! ignore me }}.</h1>

次のように表示されます:

<h1>Today.</h1>

コメントは改行を含むことが出来ます。

Partials

Partialsは>記号で始まります。{{> box}}のように書きます。

Partialsは(コンパイルタイムの対義語としての)ランタイムで表示されます。
すなわち、再起的Partialsは可能です。ただ、無限ループは回避してください。

Partialsはコンテキストの呼び出しを継承できます。ERBでこうであるものが:

<%= partial :next_more, :start => start, :size => size %>

Mustache では単にこう書きます:

{{> next_more}}

なぜか?それはnext_more.mustacheファイルがそのsizeを継承し、コンテキストからstartメソッドを呼び出すからです。

あなたはそれが文字通りでなくともPartialsをincludeやテンプレート拡張のように考えたいと思うかもしれません。

例えば、次のテンプレートとpartialsです:

base.mustache:
<h2>Names</h2>
{{#names}}
  {{> user}}
{{/names}}

user.mustache:
<strong>{{name}}</strong>

これらを1つのものと見なすしてテンプレートを拡張できました:

<h2>Names</h2>
{{#names}}
  <strong>{{name}}</strong>
{{/names}}

Set Delimiter

Set Delimiterタグは=記号で始まり、タグのデリミタを{{ と }} で囲まれる任意の文字列に変更します。

以下の不自然な例で考えてみましょう。

* {{default_tags}}
{{=<% %>=}}
* <% erb_style_tags %>
<%={{ }}=%>
* {{ default_tags_again }}

ここに3つのアイテムを持つ1つのリストがあります。
最初のアイテムはデフォルトのタグスタイルを使用します。
2つ目はSet Delimiteタグによって定義されたERBスタイルのデリミタを使います。
そして3つ目はまた別のSet Delimite定義によってデフォルトのスタイルを使用します。

ctemplatesによれば、「これはTeXのような言語に役立つ。そこでは、テキストに2重の中括弧が生じるかもしれず、markupに使用するのには不向きである」とされています。

カスタムデリミタはスペースや=記号を含むことができません。

COPYRIGHT

Mustache is Copyright (C) 2009 Chris Wanstrath

Original CTemplate by Google

SEE ALSO

mustache(1), mustache(7),
http://mustache.github.com/

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です