将一个erb文件包含在另一个中
我正在编写一个命令行工具,最终将输出一个HTML报告。 该工具是用Ruby编写的。 (我不使用Rails)。 我试图将应用程序的逻辑保存在一组文件中,并将HTML模板(.erb文件)保存在另一组文件中。
我有一个非常恼人的问题:我无法成功将一个.erb文件包含到另一个.erb文件中。
具体来说,我正在尝试做这样的事情(在伪代码中):
[include a stylesheet here] [and another one here] The rest of my document follows...
该示例代码段本身就是一个erb文件,它是从应用程序逻辑中调用的。
我正在这样做,所以我可以将样式表保留在主模板之外,以便更轻松/更清洁地维护应用程序。 但是,最终产品(报告)需要是一个没有依赖关系的单个独立HTML文件,因此,我希望在生成报告时将这些样式表内联到文档头中。
这看起来应该很容易,但是我在最后一小时一直撞到墙上(以及谷歌搜索和RTMF),我根本没有任何运气。
应该怎么做? 谢谢。
可以通过从主模板的<%=%>内评估子模板来嵌套ERB模板。
<%= ERB.new(sub_template_content).result(binding) %>
例如:
require "erb" class Page def initialize title, color @title = title @color = color end def render path content = File.read(File.expand_path(path)) t = ERB.new(content) t.result(binding) end end page = Page.new("Home", "#CCCCCC") puts page.render("home.html.erb")
home.html.erb:
<%= @title %>
home.css.erb:
body { background-color: <%= @color %>; }
生产:
Home
我在Sinatra应用程序中需要这个,我发现我可以像调用原始版本一样调用它:
在sinatra应用程序中,我称之为索引:
erb :index
然后,在索引模板中,我可以对任何子模板执行相同的操作:
<%= erb :controls %>
..which显示’controls.erb’模板。
<%= ERB.new(sub_template_content).result(binding) %>
不起作用,当您使用erb cli实用程序时,会覆盖多个_erbout变量,并且只使用最后一个。
像这样用它:
<%= ERB.new(sub_template_content, eoutvar='_sub01').result(binding) %>
从我的.erb文件中,我不得不这样做:
<%= ERB.new(File.read('pathToFile/myFile.erb'), nil, nil, '_sub01').result(binding) %>
这个post中的其他答案假设你有一个包含你内容的变量。 此版本检索内容。