如何使用.html.erb作为Sinatra视图的文件扩展名?

如果我有以下Sinatra代码:

get '/hi' do erb :hello end 

如果我有一个名为views/hello.erb的文件,这很有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方法或创建自己的render方法:

 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