0

バックエンドに Sinatra を使用するために、プレーンな HTML/CSS/JS サイトを移植しています。私が主に興味を持っているのはテンプレートです。今のところ、"index.html.erb" という名前の HTML ファイルと "layout.html.erb" という名前のレイアウトを含むビュー ディレクトリがあります。Sinatra のテンプレートを erb で使用したいのですが、私が取り組んでいるサイトは静的です。つまり、私の「index.html.erb」には erb 固有のコードが含まれていません。今のところ、views ディレクトリのレイアウトだけが本当に必要です。

views/index.html.erb を public/index.html に移動し、テンプレートの views/layout.html にラップする方法はありますか?

require 'rubygems'
require 'sinatra'

get '/index.html' do
    @page_title = 'Home'
    @page_id = 'index.html'
    erb :'index.html', { :layout => :'layout.html' }
end
4

2 に答える 2

4

Sinatra Readmeを読んだ後、あなたがやろうとしていることに出てくる2つの主要な問題があります。まず、静的ファイルとテンプレートファイル:SinatraにはプレーンHTML用のテンプレートレンダラーがないため、ERBを使用する必要があります。ERBはプレーンHTMLである可能性があるため、これに関する問題は、SinatraがERBのファイル拡張子の特定のリストしか使用できないことです(.htmlそれらの1つではありません)。

2番目の問題は、サンプルコードでは、レイアウトフォルダーをテンプレートフォルダーとは異なるものにする必要があることです(Sinatraはこれを同じと見なします。これは/viewsデフォルトです)。

これを念頭に置いて、あなたが求めているものに最も近いものは次のとおりです。

require 'sinatra'

configure do
  set :views, root
end

get '/index.html'
  erb :'public/index.html', { :layout => :'views/layout.html' }
end

ただし、これにもいくつかの問題があります。まず、前述のように、ファイルに.html.erb拡張子を付けて名前を付ける必要があります(または、上記の7行目.erbを切り取った場合)。.htmlさらに、誰でも/index.html.erbサーバー上の生のテンプレートファイルにアクセスできます。したがって、元の質問で表示した方法は、プレーンなHTMLファイルを配信せずにSinatraで実行しようとしていることを実行するための最良の方法です。

于 2012-08-22T19:03:48.853 に答える
0

これを達成するためにjqueryを使用しています:

get '/thtml/:path' do
  @path = params[:path]
  erb :thtml
end

thtml.erb

<%= "<script>$('#main').load('/t-html/#{@path}')</script>" %>

html ファイルをフォルダー /public/t-html に配置します。layout.erb に jquery を含めることを忘れないでください。

于 2012-12-24T00:16:22.743 に答える