如何使用Sinatra从不同目录渲染模板和布局

kom*_*ata 1 ruby haml sinatra

我想将模板文件放在不同的目录中.(foo /,bar /)

你怎么用Sinatra写的?

图片http://gyazo.com/618527622953071ace074f5d15190437.png?1340192301

这种方式出错了.

Bit*_*oet 8

文档:

set :views, Proc.new { File.join(root, "templates") }
Run Code Online (Sandbox Code Playgroud)

如果要使用多个目录(也来自文档):

set :views, ['views', 'templates']

helpers do
  def find_template(views, name, engine, &block)
    Array(views).each { |v| super(v, name, engine, &block) }
  end
end
Run Code Online (Sandbox Code Playgroud)

顺便说一句,您需要使用符号而不是字符串来引用模板.所以完整的代码将是:

require 'rubygems'
require 'sinatra'
require 'haml'

set :views, ['foo', 'bar']

helpers do
  def find_template(views, name, engine, &block)
    Array(views).each { |v| super(v, name, engine, &block) }
  end
end

get '/' do
  haml :index, :layout => :bar
end
Run Code Online (Sandbox Code Playgroud)

你有这些文件:

foo/index.haml
bar/bar.haml
Run Code Online (Sandbox Code Playgroud)