Haml继承模板

时间:2010-06-02 21:26:36

标签: html templates haml

我正在使用Haml(Haml / Sass 3.0.9 - Classy Cassidy)独立生成静态HTML。我想创建一个共享布局模板,我所有其他模板都继承该模板。

Layout.haml

%html
  %head
    %title Test Template
  %body
    .Content

Content.haml

SOMEHOW INHERIT Layout.haml
SOMEHOW Change the title of the page "My Content".
  %p This is my content

生产:

Content.html

<html>
  <head>
    <title>My Content</title>
  </head>
  <body>
    <div class="Content">
      <p>This is my content</p>
    </div>
  </body>
</html>

但这似乎不太可能。我已经看到在使用带有Rails的Haml时使用渲染部分,但在使用Haml独立时无法找到任何解决方案。

必须将布局代码放在我的所有模板中都是一个维护噩梦;所以我的问题是如何避免这样做?有没有一种标准的方法可以解决这个问题?我错过了一些基本的东西吗?

我发现了一个类似的问题:Rendering HAML partials from within HAMLoutside of Rails

3 个答案:

答案 0 :(得分:4)

我已经创建了一个能够满足我需求的原型。我只需要将其创建为一个模块,并允许它接受布局模板和内容模板作为参数(以及数据集)。

require "haml"

layoutTemplate = File.read('layout.haml')
layoutEngine = Haml::Engine.new(layoutTemplate)
layoutScope = Object.new

output = layoutEngine.render(scope=layoutScope) { |x|
  case x
    when :title
      scope.instance_variable_get("@haml_buffer").buffer << "My Title\n"
    when :content
       contentTemplate = File.read('page.haml')
       contentEngine = Haml::Engine.new(contentTemplate)
       contentOutput = contentEngine.render
      scope.instance_variable_get("@haml_buffer").buffer << contentOutput
  end
}

puts output

<强> layout.haml

%html
  %head
    %title
      - yield :title
  %body
    .content
      - yield :content

<强> page.haml

%h1 Testing
%p This is my test page.

<强>输出

<html>
  <head>
    <title>
My Title
    </title>
  </head>
  <body>
    <div class='content'>
<h1>Testing</h1>
<p>This is my test page.</p>
    </div>
  </body>
</html>

答案 1 :(得分:2)

Haml的构建假设它将与一些提供诸如局部和布局之类的东西的Ruby框架一起使用。如果您想要一种简单的方法来渲染带有布局和部分的静态Haml代码,请查看StaticMatic

答案 2 :(得分:1)

StaticMatic已被其创建者放弃,他现在使用http://middlemanapp.com/