我想创建一个基本的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)
可选选项哈希可以包含上面部分中记录的选项。范围是执行模板代码的对象。
但是,我仍然无法成功运行此功能。因此,我想知道是否有人可以通过制作一个有效的例子来帮助我。
编辑(最近已对此进行了编辑):
我已经玩了很多代码,但我继续收到以下错误:
undefined local variable or method `source' for main:Object (NameError)
这就是我正在运行的:
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)
非常感谢您的帮助。
答案 0 :(得分:6)
请参阅Specifying a layout and a template in a standalone (not rails) ruby app, using slim or haml
这是我最终使用的:
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 }
对于范围,您可以放入模块/类甚至self
。
答案 1 :(得分:1)
的快速要领
module SlimRender
def slim(template, variables = {})
template = template.to_s
template += '.slim' unless template.end_with? '.slim'
template = File.read("#{ROOT}/app/views/#{template}", encoding: 'UTF-8')
Slim::Template.new { template }.render OpenStruct.new(variables)
end
end
在您的班级中加入SlimRender
并:
def render_something
slim 'streams/scoreboard', scores: '1-2'
end