如何将 erubi 模板渲染为 html?
How to render erubi template to html?
随着 rails 5.1+ 切换到 erubi
我尝试在 ruby 脚本中使用它:
require 'erubi'
template = Erubi::Engine.new("<%= test %>", escape: true)
但是我正在尝试将该模板呈现为 html。
erubi
源代码:https://github.com/jeremyevans/erubi
erubi
是 erubis
的分支,在 erubis
中渲染是通过 result
方法完成的:
require 'erubis'
template = Erubis::Eruby.new("<%= test %>", escape: true)
template.result test: "<br>here" #=> "<br>here"
但是 erubi
中没有 result
方法。
From the Erubi README(它说“for a file”但它似乎是“for a template”的意思):
Erubi only has built in support for retrieving the generated source for a file:
require 'erubi'
eval(Erubi::Engine.new(File.read('filename.erb')).src)
因此,您需要从独立脚本中使用 eval
变体之一 运行。
template = Erubi::Engine.new("7 + 7 = <%= 7 + 7 %>")
puts eval(template.src)
输出 7 + 7 = 14
.
如果您希望能够像在 Rails、Sinatra 等中习惯的那样在模板中使用实例变量,则需要创建上下文对象并使用 instance_eval
:
class Context
attr_accessor :message
end
template = Erubi::Engine.new("Message is: <%= @message %>")
context = Context.new
context.message = "Hello"
puts context.instance_eval(template.src)
输出 Message is: Hello
.
在 rails 5.1 中,我将 Erubis::Eruby.new
代码切换为以下代码:
ActionController::Base.render(inline: "<%= test %>", locals: {test: "<br>here"})
Rails 会做繁重的工作。
随着 rails 5.1+ 切换到 erubi
我尝试在 ruby 脚本中使用它:
require 'erubi'
template = Erubi::Engine.new("<%= test %>", escape: true)
但是我正在尝试将该模板呈现为 html。
erubi
源代码:https://github.com/jeremyevans/erubi
erubi
是 erubis
的分支,在 erubis
中渲染是通过 result
方法完成的:
require 'erubis'
template = Erubis::Eruby.new("<%= test %>", escape: true)
template.result test: "<br>here" #=> "<br>here"
但是 erubi
中没有 result
方法。
From the Erubi README(它说“for a file”但它似乎是“for a template”的意思):
Erubi only has built in support for retrieving the generated source for a file:
require 'erubi' eval(Erubi::Engine.new(File.read('filename.erb')).src)
因此,您需要从独立脚本中使用 eval
变体之一 运行。
template = Erubi::Engine.new("7 + 7 = <%= 7 + 7 %>")
puts eval(template.src)
输出 7 + 7 = 14
.
如果您希望能够像在 Rails、Sinatra 等中习惯的那样在模板中使用实例变量,则需要创建上下文对象并使用 instance_eval
:
class Context
attr_accessor :message
end
template = Erubi::Engine.new("Message is: <%= @message %>")
context = Context.new
context.message = "Hello"
puts context.instance_eval(template.src)
输出 Message is: Hello
.
在 rails 5.1 中,我将 Erubis::Eruby.new
代码切换为以下代码:
ActionController::Base.render(inline: "<%= test %>", locals: {test: "<br>here"})
Rails 会做繁重的工作。