部分HAML模板怎么在没有Rails的Ruby中实现?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (12)

我真的不需要Rails的消耗来完成我的非常小的项目,所以我只想使用普通的Ruby和HAML来实现这一点。

我想在我的HAML模板中包含另一个HAML文件。但我还没有找到一种很好的方法来做这件事。

例如,我有这两个HAML文件:

documents.haml

%html
 %body
  = include(menu.haml) body
  %article …

menu.haml

%ul
 %li
  %a whatever …

提问于
用户回答回答于

我之前做过这件事,只是为了一个快速模。最简单的方法是将HAML渲染到父对象中:

%p some haml that's interesting
= Haml::Engine.new('%p this is a test').render
%p some more template

你很可能想要构建一些方法来简化它 ,比如一些辅助方法。该方法可能如下所示:

def render_file(filename) contents = File.read(filename) Haml::Engine.new(contents).render end

那么,你的模板看起来更像是:

%p some template
= render_file('some_filename.haml')
%p more template

请注意,可能需要将自己传递给原始的Haml :: Engine呈现,以便它知道如何找到render_file方法。

用户回答回答于

Tilt gem。它提供了一个标准接口,用于使用相同的API呈现许多不同的模板语言,让你设置自定义范围和本地化。Sinatra将其用于模板。

例:

require 'haml'
require 'tilt'

template = Tilt.new('path/to/file.haml')
# => #<Tilt::HAMLTemplate @file="path/to/file.haml" ...>
layout   = Tilt.new('path/to/layout.haml')

output = layout.render { template.render }

这可以让你在布局中获得渲染模板,就像Rails一样。

但实际上,如果你正在编写的内容将通过HTTP提供,那么我建议你看看Sinatra,它已经提供了模板,并且具有你可以想象的最简单的请求路由。

扫码关注云+社区