包括一个ERB文件到另一个(Including one erb file into another)

2019-06-23 19:25发布

我正在写一个命令行工具,这将最终输出的HTML报告。 该工具是用Ruby编写的。 (我没有使用Rails)。 我试图保持应用程序的逻辑在一组文件,并在另一组的HTML模板(在.erb文件)。

我虽然有一个很烦人的问题:我不能成功地包括一个.erb文件到另一个。

具体而言,我试图做这样的事情(在伪代码):

<html>
<head>
  <style type='text/css'>
    [include a stylesheet here]
    [and another one here]
  </style>
</head>
<body>
  <p>The rest of my document follows...

该示例代码段本身是一个ERB文件,该文件被从应用逻辑中调用。

我正在做的事情这样,所以我可以让我的样式表出主模板,使其更容易/清洁维护应用程序的。 最终产品(报告),但是,需要一个单一的,独立的HTML文件,该文件没有依赖性,因此,我要的是生成报告时,这些样式表内联到文档头部。

这看起来这应该很容易,但我一直在敲打我的头靠在墙上(谷歌搜索和和RTMF'ing)的最后一小时,和我没有任何运气可言。

这应该是怎样做? 谢谢。

Answer 1:

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><%= @title %></title>
<head>
  <style type="text/css">
<%= render "home.css.erb" %>
  </style>
</head>

home.css.erb:

body {
  background-color: <%= @color %>;
}

生产:

<title>Home</title>
<head>
  <style type="text/css">
body {
  background-color: #CCCCCC;
}
  </style>
</head>


Answer 2:

我在末日的应用程序需要这个,我发现我可以叫它以同样的方式我叫原文:

在西纳特拉的应用程序,我称之为指数:

erb :index

然后,在指数模板,我可以为任何子模板做相同的:

<div id="controls">
  <%= erb :controls %>

..这显示了“controls.erb”模板。



Answer 3:

<%= ERB.new(sub_template_content).result(binding) %>

不工作,当您使用ERB CLI工具,多_erbout变量重写,只有最后一个被使用。

使用这样的:

<%= ERB.new(sub_template_content, eoutvar='_sub01').result(binding) %>


Answer 4:

从我.erb文件中,我不得不这样做:

<%= ERB.new(File.read('pathToFile/myFile.erb'), nil, nil, '_sub01').result(binding) %>

在此线程的其他答案假设你有与它内容的变量。 该版本检索内容。



文章来源: Including one erb file into another