首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >不带Rails的Ruby中的部分HAML模板

不带Rails的Ruby中的部分HAML模板
EN

Stack Overflow用户
提问于 2011-03-26 02:45:15
回答 5查看 13.3K关注 0票数 17

对于我的小项目,我真的不需要Rails的开销,所以我只使用普通的Ruby和HAML就可以做到这一点。

我想在我的HAML模板中包含另一个HAML文件。但是我还没有找到一个好的-或者真正有用的-方法来做这件事。

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

documents.haml

代码语言:javascript
复制
%html
 %body
  = include(menu.haml) body
  %article …

menu.haml

代码语言:javascript
复制
%ul
 %li
  %a whatever …

Include显然不是解决这个问题的方法。但它很好地描述了我在这个例子中试图实现的目标。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-03-26 03:06:29

我以前也这样做过,只是为了一个简单的模板生成器。最简单的方法是只在父对象中呈现HAML:

代码语言:javascript
复制
%p some haml that's interesting
= Haml::Engine.new('%p this is a test').render
%p some more template

您很可能想要构建一些方法来简化这一过程--几个助手方法。也许您编写了一个名为render_file的函数,它接受一个文件名作为参数。该方法可能类似于:

代码语言:javascript
复制
def render_file(filename)
  contents = File.read(filename)
  Haml::Engine.new(contents).render
end

然后,您的模板将看起来更像:

代码语言:javascript
复制
%p some template
= render_file('some_filename.haml')
%p more template

注意,您可能需要将self传递给原始的Haml::Engine render,以便它知道如何找到您的render_file方法。

票数 18
EN

Stack Overflow用户

发布于 2011-03-26 05:46:12

对于这些事情,我完全推荐使用Tilt gem。它提供了一个标准接口,用于使用相同的API呈现许多不同的模板语言,允许您设置自定义作用域和局部变量,允许您使用yield,并且健壮且快速。Sinatra将其用于模板。

示例:

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

这让您可以在布局中使用yield来获得呈现的模板,就像Rails一样。至于分音,David已经描述了一种简单而好的方法。

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

票数 23
EN

Stack Overflow用户

发布于 2013-04-21 04:01:56

我用David Richards发布的指令以一种串联的方式获得了巨大的成功,没有变量,就像这样:

= Haml::Engine.new(File.read('/Volumes/Project/file_to_include.haml')).render

显然有一种更优雅的方式。但是对于那些只想包含一两个文件的人来说,这应该可以很好地工作。这是一个缺点,所有使用这些包含的基本文件都必须在对后者进行一些更改后重新编译。如果环境允许的话,使用php include可能是值得的。

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

https://stackoverflow.com/questions/5436769

复制
相关文章

相似问题

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