0

我将一个普通的 HTML/CSS/JS 站点移植到使用 Sinatra 作为其后端。我最感兴趣的是模板。现在,我有一个名为“index.html.erb”的 HTML 文件和一个名为“layout.html.erb”的布局的视图目录。虽然我想将 Sinatra 的模板与 erb 一起使用,但我正在处理的站点是静态的。换句话说,我的“index.html.erb”中没有任何特定于 erb 的代码。我现在只需要我的视图目录中的布局。

有没有办法可以将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 自述文件后,您尝试做的事情有两个主要问题。首先,静态文件与模板文件:Sinatra 没有用于纯 HTML 的模板渲染器,因此您必须使用 ERB。由于 ERB 可以是纯 HTML,因此问题在于 Sinatra 只能使用特定的 ERB 文件扩展名列表(并且.html不是其中之一)。

第二个问题是,在您的示例代码中,您的布局文件夹必须与模板文件夹不同(Sinatra 认为这是相同的,/views默认情况下)。

考虑到这一点,您可以得到的最接近您所要求的内容如下:

require 'sinatra'

configure do
  set :views, root
end

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

然而,这也有一些问题。首先,如上所述,您必须使用.html.erb扩展名命名您的文件(或者,.erb如果您.html从上面的第 7 行中删除)。此外,任何人都可以访问/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 回答