在Rails之外的HAML中渲染HAML部分

我正在使用HAML为网站生成一些静态html页面,我想要将常用组件拆分为可以包含在多个页面中的部分,就像在Rails中一样。 但是我不想使用整个Rails堆栈来执行此操作,因为它看起来有点矫枉过正。

我在互联网上环顾四周但没有找到任何东西,比做以下事情更好:

Haml::Engine.new(IO.read("header.haml")).render 

是否有更好的方法在HAML中包含所谓的部分内容? 我缺少的现有filter或命令?

最好将haml和sass与用于构建静态网站的工具结合起来。 这是一些链接:

  • StaticMatic
  • 服务
  • Haml Jekyll – 一个支持haml的Jekyll的叉子。
  • 中间人

我正在为我的博客使用jekyll,但如果你没有建立博客,那可能不适合你的需求。

Darn,你是对的 – 没有内置的方式。 我已经使用了haml命令行的帮助程序,但总是那些输出已经是HTML格式的。

我最好的建议是编写一个partial()方法并要求它。 看起来你已经开始走这条路。 我建议任何人写这样一个函数考虑以某种方式保持原始绑定。 Haml :: Helpers#capture_hame看起来是实现这一目标的最简单方法。

如果执行速度是一个问题,那么以与Merb相同的方式缓存一些已解析的模板也是一个好主意。

如果有人确实使用了一些代码,请将其放在GitHub上并在此处发表评论。

所有的解决方案对我来说似乎都很笨重,尽管我试图做同样的事情。 这是我编写的一个非常小的ruby脚本 – 评估Haml可以选择在任何你喜欢的地方粘贴= partial "test.haml" 。 它尝试找到一个部分文件需要很少的逻辑。

 require 'haml' def find filename return filename if File.exists? filename path = File.dirname ARGV[0] filename = path+"/"+filename return filename if File.exists? filename throw "Could not find file." end def partial filename source = File.read(find(filename)) engine = Haml::Engine.new(source) engine.render(binding) end puts partial ARGV[0] 

你执行它是这样的:ruby hamlize.rb input.haml> output.html

我有同样的问题。 我需要生成一些html片段来优化服务器响应,一旦这个片段有大量的计算(用于绘制图形),并且每次用户做出请求时它都会不必要地执行所有这些操作。

一旦我将视图分区为几个haml partials,我想重用它来生成html文件。

我的第一种方法是尝试使用Haml引擎,但是一旦我有部分渲染应用程序助手的其他部分和一些function,它就没有用了。 Finality我找到了一个解决方案,通过在我想创建一个html文件的模型中创建一个函数来传递(to_html)这是它:

 def to_html ActionView::Base.send :include, ActionView::Helpers::ApplicationHelper File.open(File.join(Rails.root, "public", 'test.html'), "w") do |file| file.print ActionView::Base.new(Rails.configuration.paths["app/views"].first).render( :partial => 'partial_folder/partial', :format => :html, :locals => { :model => self} ) end end 

这样,我就可以使用已经完成的部分来打印html文件。 这对我有用,也许它也可以帮到你。

我终于找到了我想要的东西,所以我想我会和你分享我的发现。 您可以首先使用与haml相同的语法 – http://www.semicomplete.com/blog/geekery/partials-in-haml-in-sinatra.html

/views/file.haml

 %h3 Title %div= haml :content, :layout => false 

/views/content.haml

 %p your content here