Haml 是 Ruby 社区的一种 HTML 标记语言,它利用强制缩进和类似 jQuery 属性标签的风格,简化书写 HTML 的工作。文档见:http://haml.info/docs.html。
下面是一段官网上的快速入门,从标准的 erb 模板转变成 haml 模板:
<div id='content'>
<div class='left column'>
<h2>Welcome to our site!</h2>
<p><%= print_infomation %></p>
</div>
<div class='right' id='item<%= item.id %>'>
<%= render :partial => "item" %>
</div>
</div>
用 haml 只用这么写:
#content
.left.column
%h2 Welcome to our site!
%p= print_information
.right{:id => "item#{item.id}"}
= render :partial => "sidebar"
看起来相当 cool,回头在 CPAN 上一翻,原来 perl 社区也有 port 过来的 Text::Haml 了。根据 perl 的特点有所改变,但是省键盘的特点依然在。
下面是一个例子:
use Text::Haml;
my $haml = Text::Haml->new();
my $hash = {
title => 'my title',
content => { line1 => "test", line2 => "test2" }
};
print $haml->render_file('test.haml', %$hash);
test.haml
如下:
%html{ :xmlns => "http://www.w3.org/1999/xhtml", :lang => "zh"}
%head
%title= $title
%body
#content
.container
%strong= $title
- for my $line ( keys %$content ) {
.row-fluid= $content->{$line}
- }
生成的 HTML 内容如下:
<html xmlns='http://www.w3.org/1999/xhtml' lang='zh'>
<head>
<title>my title</title>
</head>
<body>
<div id='content'>
<div class='container'>
<strong>my title</strong>
<div class='row-fluid'>test</div>
<div class='row-fluid'>test2</div>
</div>
</div>
</body>
</html>
Text::Haml 还提供了一个初始化参数 vars_as_subs
,可以把变量变成同名函数,这样写起来就更像 ruby 了。不过目前只能是纯变量,复杂语句还是不行,所以好看不中用……
Text::Haml 向 Text::Xslate 学习,也提供了 cache_dir
, filter
等等功能,所以性能和功能方面应该也不差。
Template::Tookit 也有插件 Template::Plugin::Haml 可以参看。
!!! 5
%html
[% content %]
[%- message='Hello World' %]
[%- USE Haml -%]
[%- WRAPPER wrapper.tt | haml -%]
[%- FILTER haml -%]
%head
%meta{:charset => "utf-8"}
%title hello
%body
%p [% message %]
%ul
[%- total=0; WHILE total < 5 %]
%li [% total=total+1 %][% total %]
[%- END -%]
[%- END -%]
perl 三大 web 框架 Catalyst/Mojo/Dancer也都有对应的模板插件。