ruby - 我如何使用 .html.erb 作为 Sinatra View 的文件扩展名?

标签 ruby sinatra erb

如果我有以下 Sinatra 代码:

get '/hi' do
  erb :hello
end

如果我有一个名为 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 方法或创建您自己的渲染方法:

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

关于ruby - 我如何使用 .html.erb 作为 Sinatra View 的文件扩展名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11741585/

相关文章:

ruby - `configure' : undefined method `[]' while i vagrant up my vm

ruby - 如何将jekyll安装到Docker镜像?

mysql - Sinatra 的 REST API 路由无法正常工作

javascript - 使用 Sinatra 进行流式传输,逐渐更新目的地

ruby-on-rails - 使用 Rails 以外的 Ruby 框架是否有任何潜在的缺点?

ruby-on-rails - 在 Rails 4 中创建当前变量

ruby-on-rails - 如何验证ERB或捕获ERB语法错误

android - 关于 Android Studio 中 calabash-android 支持的问题 : Ruby, Editing features and steps, Launching tests

html - bootstrap text_area 的高度应用不正确

ruby-on-rails - Ruby 动态分配编号变量