首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Haml继承模板

Haml继承模板
EN

Stack Overflow用户
提问于 2010-06-02 21:26:35
回答 3查看 2.1K关注 0票数 5

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

Layout.haml

代码语言:javascript
复制
%html
  %head
    %title Test Template
  %body
    .Content

Content.haml

代码语言:javascript
复制
SOMEHOW INHERIT Layout.haml
SOMEHOW Change the title of the page "My Content".
  %p This is my content

生产:

Content.html

代码语言:javascript
复制
<html>
  <head>
    <title>My Content</title>
  </head>
  <body>
    <div class="Content">
      <p>This is my content</p>
    </div>
  </body>
</html>

但这似乎不可能。我见过在Rails中使用Haml时使用呈现部分的用法,但在使用Haml独立时却找不到任何解决方案。

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

我发现了一个类似的问题:从Rails的HAMLoutside中呈现HAML部分

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-03 11:00:15

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

代码语言:javascript
复制
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

代码语言:javascript
复制
%html
  %head
    %title
      - yield :title
  %body
    .content
      - yield :content

page.haml

代码语言:javascript
复制
%h1 Testing
%p This is my test page.

输出

代码语言:javascript
复制
<html>
  <head>
    <title>
My Title
    </title>
  </head>
  <body>
    <div class='content'>
<h1>Testing</h1>
<p>This is my test page.</p>
    </div>
  </body>
</html>
票数 4
EN

Stack Overflow用户

发布于 2010-06-02 23:00:01

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

票数 2
EN

Stack Overflow用户

发布于 2011-07-28 12:01:38

StaticMatic已经被它的创建者抛弃了,后者现在使用http://middlemanapp.com/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2961718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档