10

如果我有以下 Sinatra 代码:

get '/hi' do
  erb :hello
end

如果我有一个名为views/hello.erb. 但是,如果我有一个名为views/hello.html.erbSinatra 的文件,则找不到该文件并给我一个错误。如何告诉 Sinatra 我希望它.html.erb作为有效的 .erb 扩展名查找?

4

2 回答 2

26

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 进行注册,但坦率地说,这听起来并不值得。

于 2012-07-31T16:12:15.613 回答
9

这应该做

get '/hi' do
  erb :'hello.html'
end

或者,

get '/hi' do
  erb 'hello.html'.to_sym
end
于 2012-07-31T16:02:52.023 回答