ここ↓に載ってるSinatraとerbを使ってのHello Worldのerb部分をHamlで書き直してみた。
http://gihyo.jp/dev/serial/01/ruby/0009?page=2
これが元のコード
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'rubygems' | |
require 'sinatra' | |
helpers do | |
include Rack::Utils; alias_method :h, :escape_html | |
end | |
template :layout do | |
"<html><body><h1>Hello World</h1><%= yield %></body></html>" | |
end | |
get '/' do | |
erb %{ | |
<p>あなたの名前は?</p> | |
<form action='/hello' method='POST'> | |
<input type='text' name='name'> | |
<input type='submit' value='送信'> | |
</form> | |
} | |
end | |
post '/hello' do | |
erb %{ | |
<p>こんにちは,<%= h params[:name] %>さん!</p> | |
<a href='/'>戻る</a> | |
} | |
end |
そしてこれがHamlを使って書き直したもの。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
require 'rubygems' | |
require 'sinatra' | |
require 'haml' | |
helpers do | |
include Rack::Utils; alias_method :h, :escape_html | |
end | |
template :layout do " | |
%html | |
%body | |
%h1 Hello World | |
=yield | |
" | |
end | |
get '/' do | |
haml ' | |
%p あなたの名前は? | |
%form{:action=>"/hello", :method=>"POST"} | |
%input{:type=>"text", :name=>"name"} | |
%input{:type=>"submit", :value=>"送信"} | |
' | |
end | |
post '/hello' do | |
haml ' | |
%p== こんにちは、#{h params[:name]}さん! | |
%a{:href=> "/"} 戻る | |
' | |
end | |
「template :layout」には、htmlタグとかみたいな、各ページに共通する、まさにテンプレ部分を書くらしい。
ページによって無効にしたいときは、「haml :layout => false」してやればいいようだ。
ちなみに各タグに¥nとかの改行コードをつけてやれば、erbみたいに1行で書くこともできるけど、やってみたら気持ち悪い&見辛かった、のでこういう風にした。
インデントは全体的にちょっと気持ち悪いけど、Hamlはインデントに意味を持たせてるから下手にいじるとエラーが出ちゃう。
SinatraでHamlを使うときは、きちんと別ファイルを作ってやるとかしたほうがよさげなのかな。
追記:
別ファイルに作ってやった
http://zakuni.blogspot.com/2010/12/sinatrahaml.html
0 件のコメント:
コメントを投稿