Sinatra 視圖 / 模板

2023-12-19 15:22 更新

模板被假定直接位于?./views?目錄。使用不同的視圖目錄,可以這樣設(shè)置:

set :views, File.dirname(FILE) + '/templates'

每個(gè)模板語(yǔ)言都可以通過(guò)其自身的渲染方法 (比如:erb,haml) 來(lái)渲染,這些方法可以簡(jiǎn)單的返回字符串。

get '/' do
  erb :index
end

get '/index' do
  code = "<%= Time.now %>"
  erb code
end

模板可以接受第二個(gè)參數(shù),即選項(xiàng) hash:

get '/' do
  erb :index, :layout => :post
end

上面的代碼,將會(huì)將?views/index.erb?渲染到?views/post.erb?(布局模板) 文件中,默認(rèn)的布局模板是?views/layout.erb?。

任何 Sinatra 不理解選項(xiàng)都將被傳遞到模板引擎中。

get '/' do
  haml :index, :format => :html5
end

通過(guò) set 選項(xiàng),可以設(shè)置模板語(yǔ)言的通用選項(xiàng):

set :haml, :format => :html5 # html5是新技術(shù),使用新技術(shù)有風(fēng)險(xiǎn)也有挑戰(zhàn)

get '/' do
  haml :index
end

傳遞給 render 方法的選項(xiàng)可以通過(guò)?set?方法進(jìn)行設(shè)置,常見(jiàn)的選項(xiàng)如下:

  • ?locals?: 列出傳遞給文檔的局部變量 (locals),用來(lái)處理部分視圖。例如:?erb "<%= foo %>", :locals => {:foo => "bar"}?
  • ?default_encoding?: 不確定時(shí)使用的字符編碼,默認(rèn)為 settings.default_encoding.
  • ?views?: 加載模板的視圖文件夾,默認(rèn)為:settings.views.
  • ?layout?: 是否使用布局 (true 或者 false). 如果為符號(hào),表明所使用的模板,例如:?erb :index, :layout => !request.xhr??(這個(gè)實(shí)例不錯(cuò),判斷是否是 xhr,從而確定是否使用布局)
  • ?content_type?: 模板所生成的內(nèi)容類型 (json,html,js 之類), 模板依賴模板語(yǔ)言
  • ?scope?: 渲染模板所在的域。默認(rèn)為應(yīng)用程序?qū)嵗?。如果改變值,?shí)例變量和輔助方法都將不在可得獲取
  • ?layout_engine?: 模板應(yīng)用用來(lái)渲染布局,這對(duì)那些不支持布局的語(yǔ)言非常有用。默認(rèn)使用模板引擎,例如:?set :rdoc , :layout_engine => :erb?
  • ?layout_options?: 僅用來(lái)渲染布局的特定選項(xiàng),例如:?set :rdoc, :layout_options => { :views => 'views/layouts' }?

Sinatra 總是假設(shè)模板位于?/views?目錄,可以?set :views, settings.root + '/templates'?設(shè)置不同的視圖文件。

請(qǐng)記住一件非常重要的事情,你只可以通過(guò)符號(hào)引用模板,即使它們?cè)谧幽夸浵拢ㄔ谶@種情況下,使用 :'subdir/template')。你必須使用一個(gè)符號(hào),因?yàn)殇秩痉椒〞?huì)直接地渲染任何傳入的字符串。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)