如果我有一个.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参数)?
答案 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文件。
答案 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文件。