Sinatra 视图 / 模板
2023-12-19 15:22 更新
模板被假定直接位于./views
目录。使用不同的视图目录,可以这样设置:
set :views, File.dirname(FILE) + '/templates'
每个模板语言都可以通过其自身的渲染方法 (比如:erb,haml) 来渲染,这些方法可以简单的返回字符串。
get '/' do
erb :index
end
get '/index' do
code = "<%= Time.now %>"
erb code
end
模板可以接受第二个参数,即选项 hash:
get '/' do
erb :index, :layout => :post
end
上面的代码,将会将views/index.erb
渲染到views/post.erb
(布局模板) 文件中,默认的布局模板是views/layout.erb
。
任何 Sinatra 不理解选项都将被传递到模板引擎中。
get '/' do
haml :index, :format => :html5
end
通过 set 选项,可以设置模板语言的通用选项:
set :haml, :format => :html5 # html5是新技术,使用新技术有风险也有挑战
get '/' do
haml :index
end
传递给 render 方法的选项可以通过set
方法进行设置,常见的选项如下:
-
locals
: 列出传递给文档的局部变量 (locals),用来处理部分视图。例如:erb "<%= foo %>", :locals => {:foo => "bar"}
-
default_encoding
: 不确定时使用的字符编码,默认为 settings.default_encoding. -
views
: 加载模板的视图文件夹,默认为:settings.views. -
layout
: 是否使用布局 (true 或者 false). 如果为符号,表明所使用的模板,例如:erb :index, :layout => !request.xhr
?(这个实例不错,判断是否是 xhr,从而确定是否使用布局) -
content_type
: 模板所生成的内容类型 (json,html,js 之类), 模板依赖模板语言 -
scope
: 渲染模板所在的域。默认为应用程序实例。如果改变值,实例变量和辅助方法都将不在可得获取 -
layout_engine
: 模板应用用来渲染布局,这对那些不支持布局的语言非常有用。默认使用模板引擎,例如:set :rdoc , :layout_engine => :erb
-
layout_options
: 仅用来渲染布局的特定选项,例如:set :rdoc, :layout_options => { :views => 'views/layouts' }
Sinatra 总是假设模板位于/views
目录,可以set :views, settings.root + '/templates'
设置不同的视图文件。
请记住一件非常重要的事情,你只可以通过符号引用模板,即使它们在子目录下(在这种情况下,使用 :'subdir/template')。你必须使用一个符号,因为渲染方法会直接地渲染任何传入的字符串。
以上内容是否对您有帮助:
更多建议: