使用ERB生成HTML文件?

时间:2014-08-12 21:48:52

标签: html ruby erb

如果我有一个.html.erb文件,如下所示:

<html>
    <head>
        <title>Test</title>
    </head>
    <body>
        <%= @name %>
    </body>
</html>

如何生成看起来像这样的HTML文件?

<html>
    <head>
        <title>Test</title>
    </head>
    <body>
        John
    </body>
</html>

如果格式为.html.erb并且能够获得.html文件,我该如何执行模板(传递name参数)?

3 个答案:

答案 0 :(得分:9)

#page.html.erb
<html>
    <head>
        <title>Test</title>
    </head>
    <body>
        <%= @name %>
    </body>
</html>

...

require 'erb'

erb_file = 'page.html.erb'
html_file = File.basename(erb_file, '.erb') #=>"page.html"

erb_str = File.read(erb_file)

@name = "John"
renderer = ERB.new(erb_str)
result = renderer.result()

File.open(html_file, 'w') do |f|
  f.write(result)
end

...

$ ruby erb_prog.rb
$ cat page.html
<html>
    <head>
        <title>Test</title>
    </head>
    <body>
        John
    </body>
</html>

当然,为了让事情更有趣,您可以随时将行@name = "John"更改为:

print "Enter a name: "
@name = gets.chomp

答案 1 :(得分:0)

ruby​​ ERB库对字符串进行操作,因此您必须将.erb文件读入字符串,创建ERB对象,然后将结果输出到html文件,并将当前绑定传递给ERB.result方法

看起来像

my_html_str = ERB.new(@my_erb_string).result(binding)

其中@my_erb_string。然后,您可以将html字符串写入html文件。

您可以阅读有关绑定here和ERB库here的更多信息。

答案 2 :(得分:0)

以下是示例代码:

require 'erb'

template = File.read("template.html.erb")

renderer = ERB.new(template)

class Message
  attr_accessor :name

  def initialize(name)
    @name = name
  end

  def get_binding
    binding()
  end

end

message = Message.new 'John'

File.open('result.html', 'w') do |f|
  f.write renderer.result message.get_binding
end

template.html.erb是您的 .html.erb 模板文件,result.html是呈现的html文件。

您可以查看一些不错的文章,link1link2