Ruby 如何使用.html.erb作为Sinatra视图的文件扩展名?
如果我有以下Sinatra代码:Ruby 如何使用.html.erb作为Sinatra视图的文件扩展名?,ruby,sinatra,erb,Ruby,Sinatra,Erb,如果我有以下Sinatra代码: get '/hi' do erb :hello end 如果我有一个名为views/hello.erb的文件,这将非常有用。但是,如果我有一个名为views/hello.html.erbSinatra的文件,它将找不到该文件并给我一个错误。如何告诉Sinatra我希望它将.html.erb作为有效的.erb扩展名?这样就可以了 get '/hi' do erb :'hello.html' end 或者 get '/hi' do erb 'hell
get '/hi' do
erb :hello
end
如果我有一个名为views/hello.erb
的文件,这将非常有用。但是,如果我有一个名为views/hello.html.erb
Sinatra的文件,它将找不到该文件并给我一个错误。如何告诉Sinatra我希望它将.html.erb
作为有效的.erb扩展名?这样就可以了
get '/hi' do
erb :'hello.html'
end
或者
get '/hi' do
erb 'hello.html'.to_sym
end
Sinatra用于呈现其模板,并将扩展与模板关联。您所要做的就是告诉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中,但坦率地说,这听起来并不值得。+1。这是Issac答案的合理替代方案,谢谢。我想在全球范围内制定这一惯例,而不是在每条路线上都这样做,所以我同意他的答案。考虑到没有ERB扩展,这不是一个好建议谢谢!很好用,而且还能让
.erb
工作。并不是说我想混合惯例,但还是很容易知道。你知道吗?如果我不想再处理.erb,而只处理.html.erb,我可以调用.register
以外的东西来禁用.erb扩展名吗?