如果我有以下 Sinatra 代码:
get '/hi' do
erb :hello
end
如果我有一个名为views/hello.erb
. 但是,如果我有一个名为views/hello.html.erb
Sinatra 的文件,则找不到该文件并给我一个错误。如何告诉 Sinatra 我希望它.html.erb
作为有效的 .erb 扩展名查找?
Sinatra 使用Tilt来呈现其模板,并将扩展与它们相关联。你所要做的就是告诉 Tilt 它应该使用 ERB 来渲染那个扩展:
Tilt.register Tilt::ERBTemplate, 'html.erb'
get '/hi' do
erb :hello
end
编辑以回答后续问题。没有#unregister
,还要注意 Sinatra 会更喜欢 hello.erb 而不是 hello.html.erb。解决首选项问题的方法是覆盖该erb
方法或制作您自己的渲染方法:
Tilt.register Tilt::ERBTemplate, 'html.erb'
def herb(template, options={}, locals={})
render "html.erb", template, options, locals
end
get '/hi' do
herb :hello
end
那将更喜欢 hello.html.erb,但如果找不到 hello.html.erb,它仍然会求助于 hello.erb。如果您真的想防止在任何情况下找到 .erb 文件,我猜您可以将 ERBTemplate 子类化并针对 .html.erb 进行注册,但坦率地说,这听起来并不值得。
这应该做
get '/hi' do
erb :'hello.html'
end
或者,
get '/hi' do
erb 'hello.html'.to_sym
end