我正在移植一个简单的HTML / CSS / JS站点,以便将Sinatra用作其后端。我感兴趣的主要是模板。现在,我有一个视图目录,其中包含名为“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
答案 0 :(得分:4)
阅读Sinatra Readme后,您尝试做的事情中出现了两个主要问题。首先,静态文件与模板文件:Sinatra没有纯HTML的模板渲染器,因此您必须使用ERB。由于ERB可以是纯HTML,因此问题是Sinatra只能为ERB使用某个文件扩展名列表(并且.html
不是其中之一)。
第二个问题是,在您的示例代码中,您必须使布局文件夹与templates文件夹不同(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
的原始模板文件。因此,您在原始问题中显示的方法是在Sinatra中执行您尝试执行的操作而不提供纯HTML文件的最佳方法。
答案 1 :(得分: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。