Sinatra 視圖 / 模板

2023-12-19 15:22 更新

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

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

每個模板語言都可以通過其自身的渲染方法 (比如:erb,haml) 來渲染,這些方法可以簡單的返回字符串。

get '/' do
  erb :index
end

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

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

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

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

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

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

通過 set 選項,可以設(shè)置模板語言的通用選項:

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

get '/' do
  haml :index
end

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

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

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

請記住一件非常重要的事情,你只可以通過符號引用模板,即使它們在子目錄下(在這種情況下,使用 :'subdir/template')。你必須使用一個符號,因為渲染方法會直接地渲染任何傳入的字符串。


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號