使用 Ruby 和 Sinatra,是否可以以 "internal" 或 "inline" 的方式使用 HAML?

Using Ruby and Sinatra, Is it possible to use HAML in an "internal" or "inline" manner?

我完成了 gem install sinatragem install haml

我有这个 .rb 文件

require 'sinatra'

get '/abc2' do
"<b>aaaaaaaaaaaaa</b>"
end

现在假设我想要 HTML 的那一行,但是在 HAML 中。而不是外部

我知道我能做到

get '/abc' do
  haml :index  # /views/index.haml 
end

而index.haml可以有一行haml %b aaaaaaa

但是有什么方法可以在我的 ruby 文件中包含 %b aaaaaaa 并呈现它。无需参考文件,例如无需参考 /views/index.haml ?

与 CSS 一样,您可以将 CSS 置于外部,或者它可以让您将其置于 html 文件的内部。同样,Javascript 可以让您导入 javascript 外部,或者它允许您将它放在 html 文件的内部。我想问的是在 .rb 文件内部使用 HAML。可能吗?

我知道 HAML 旨在作为一种模板语言,用于将数据注入...但它也是一种 shorthand 用于更简洁地编写 HTML。

您应该可以使用 Haml::Engine#render 将 Haml 转换为 HTML,如下所示:

get '/abc2' do
  Haml::Engine.new(<<-Haml).render(binding)
    %b aaaaaa
  Haml
end

这使用了 heredoc(<<-Haml 行和结束 Haml 之间的所有内容。binding 是一个特殊变量,基本上指的是当前范围。

对于小型应用程序,您可以在脚本末尾添加视图,这样就没有外部文件了。

get '/abc' do
  haml :hello
end
__END__
@@ hello
%h1= "Hello there"