繁体   English   中英

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

[英]How do I use .html.erb as a file extension for my views with 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM