我想创建一个基本的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)
非常感谢您的帮助.
请参阅使用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.