Sinatra 查找模板文件

2023-12-20 15:43 更新

find_template 輔助方法被用于在渲染時查找模板文件:

find_template settings.views, 'foo', Tilt[:haml] do |file|
  puts "could be #{file}"
end

這并不是很有用。但是在你需要重載這個方法 來實現(xiàn)你自己的查找機制的時候有用。比如,如果你想支持多于一個視圖目錄:

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

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

另一個例子是為不同的引擎使用不同的目錄:

set :views, :sass => 'views/sass', :haml => 'templates', :default => 'views'

helpers do
  def find_template(views, name, engine, &block)
    _, folder = views.detect { |k,v| engine == Tilt[k] }
    folder ||= views[:default]
    super(folder, name, engine, &block)
  end
end

你可以很容易地包裝成一個擴展然后與他人分享!

請注意 ?find_template? 并不會檢查文件真的存在,而是對任何可能的路徑調(diào)用給入的代碼塊。這并不會帶來性能問題,因為 render 會在找到文件的時候馬上使用 break。同樣的,模板的路徑(和內(nèi)容)會在除 development mode 以外的場合 被緩存。你應該時刻提醒自己這一點,如果你真的想寫一個非常瘋狂的方法。


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號