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')。你必须使用一个符号,因为渲染方法会直接地渲染任何传入的字符串。


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号