繁体   English   中英

如何在Sinatra中将erb模板与静态文件一起使用?

[英]How can I use erb templates with static files in Sinatra?

我正在将纯HTML / CSS / JS网站移植到使用Sinatra作为后端。 我最感兴趣的是模板。 现在,我有一个views目录,其中包含名为“ index.html.erb”的HTML文件和名为“ layout.html.erb”的布局。 虽然我想在erb中使用Sinatra的模板,但是我正在处理的站点是静态的。 换句话说,我的“ 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

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

第二个问题是,在示例代码中,您必须使layout文件夹与模板文件夹不同(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出七号线的上方)。 此外,任何人都可以访问服务器上/index.html.erb上的原始模板文件。 因此,您在原始问题中显示的方法是在不提供纯HTML文件的情况下在Sinatra中尝试执行的操作的最佳方法。

我正在使用jquery完成此操作:

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

thtml.erb

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

将html文件放在文件夹/ p​​ublic / t-html中。 不要忘记在layout.erb中包含jquery。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM