如果我有以下 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 注册它,但坦率地说,这听起来不值得
关于ruby - 我如何使用 .html.erb 作为 Sinatra View 的文件扩展名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11741585/