Sinatraでも対応してる軽量/シンプルなテンプレートエンジンHamlについてしらべてみた。
そのチュートリアルを勝手に要約してみる
ERBと比較してみるとそのシンプルさがよくわかる。
タグとそのコンテント
テンプレートエンジン |
記述 |
ERB |
<strong><%= item.title %></strong> |
Haml |
%strong= item.title |
Hamlでは"%ほげ"でタグを表す
タグにつづく=の内容はRubyの文として評価されて、その結果がタグのコンテンツになる。
タグの属性
テンプレートエンジン |
記述 |
ERB |
<strong class="code" id="message">Hello, World</strong> |
Haml |
%strong.code#message Hello, World |
タグの属性はタグ名に続けてハッシュを記述することで設定する。
また、上記のようにタグのコンテンツがRubyのコードじゃない場合、"="はいらない。
テンプレートエンジン |
記述 |
ERB |
<strong class="code" id="message">Hello, World</strong> |
Haml |
%strong.code#message Hello, World |
classやidなどの属性はCSSセレクタっぽく書く事ができる
タグは省略するとdivタグと見なされる
テンプレートエンジン |
記述 |
なし(HTML) |
<div clas='content'>Hello, world.</div> |
Haml |
.content Hello, world |
ERB
<div class='item' id='item<%= item.id %>'>
<%= item.body %>
</div>
.item{:id => "item#{item.id}"}= item.body
属性のところでは普通に#{}での変数の展開ができる。
その2
ERB
<div id='content'>
<div class='left column">
<h1>Welcome to our site!</h2>
<p><%= print_information %></p>
</div>
<div class="right column">
<%= render :partial => "sidebar" %>
</div>
</div>
#content
.left.column
%h2 Welcome to our site!
%p= print_information
.right.column
= render :partial => "sidebar"
入れ子の構造を表す場合、インデントを使用する。