如果我有以下Sinatra代码:
get '/hi' do
erb :hello
end
Run Code Online (Sandbox Code Playgroud)
如果我有一个名为的文件,这很好用views/hello.erb
.但是,如果我有一个名为views/hello.html.erb
Sinatra的文件找不到该文件并给我一个错误.我如何告诉Sinatra我希望它.html.erb
作为有效的.erb扩展名寻找?
小智 26
Sinatra使用Tilt渲染其模板,并将扩展与它们相关联.您所要做的就是告诉Tilt它应该使用ERB来呈现该扩展:
Tilt.register Tilt::ERBTemplate, 'html.erb'
get '/hi' do
erb :hello
end
Run Code Online (Sandbox Code Playgroud)
编辑以回答后续问题.没有,#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
Run Code Online (Sandbox Code Playgroud)
这将更喜欢hello.html.erb,但如果找不到hello.html.erb,它仍会依赖hello.erb.如果你真的想要防止在任何情况下找到.erb文件,我猜,你可以将子类化为ERBTemplate并将其注册到.html.erb,但坦率地说这听起来不值得.
这应该做
get '/hi' do
erb :'hello.html'
end
Run Code Online (Sandbox Code Playgroud)
或者
get '/hi' do
erb 'hello.html'.to_sym
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6953 次 |
最近记录: |