如何在红宝石中直接使用Slim

Ism*_*hul 2 ruby slim-lang

我想创建一个基本的ruby脚本,将Slim模板呈现为html(这最终将成为更大项目的一部分).理想情况下,我想使用脚本中生成的HTML.

我知道这可以使用TILT(如SLIM README中所示),其中说明如下:


Slim使用Tilt编译生成的代码.如果要直接使用Slim模板,可以使用Tilt界面.

 Tilt.new['template.slim'].render(scope)
 Slim::Template.new('template.slim', optional_option_hash).render(scope)
 Slim::Template.new(optional_option_hash) { source }.render(scope)
Run Code Online (Sandbox Code Playgroud)

可选的选项哈希可以包含上面部分中记录的选项.范围是执行模板代码的对象.


但是,我仍然无法成功运行它.因此,我想知道是否有人可以通过制作一个有效的例子来帮助我.

编辑(最近进一步编辑):

我已经玩了很多代码但我继​​续得到以下错误:

 undefined local variable or method `source' for main:Object (NameError)
Run Code Online (Sandbox Code Playgroud)

这就是我正在运行的:

require 'slim'

# I'm not sure about the next two lines...
optional_option_hash = {}
scope = Object.new    

Tilt.new('template.slim').render(scope)
Slim::Template.new('template.slim', optional_option_hash).render(scope)
Slim::Template.new(optional_option_hash) { source }.render(scope)    
Run Code Online (Sandbox Code Playgroud)

非常感谢您的帮助.

Ism*_*hul 7

请参阅使用slim或haml在独立(非rails)ruby应用程序中指定布局和模板

这是我最终使用的:

require 'slim'

# Simple class to represent an environment
class Env
  attr_accessor :name
end

scope = Env.new
scope.name = "test this layout"

layout =<<EOS
h1 Hello
.content
  = yield
EOS

contents =<<EOS
  = name
EOS

layout = Slim::Template.new { layout }
content = Slim::Template.new { contents }.render(scope)

puts layout.render{ content }
Run Code Online (Sandbox Code Playgroud)

对于范围,您可以放入模块/类甚至self.