如何获得与Sinatra合作的Liquid模板部分(包括)?

时间:2014-08-19 12:44:54

标签: ruby include sinatra liquid partials

我是ruby的新手,我正在尝试在我的Sinatra + Liquid项目中使用模板部分。

我的/ includes目录中有几个模板部分。

如何才能将所有这些模板用作液体部分,以便将它们与液体包含标签一起使用?

我实际做了什么:

# Sinatra First App
require 'sinatra'
require 'sinatra/config_file'
require 'liquid'

config_file 'config.yml'

# WebRick
set :run, true
set :server, %w[webrick]

# App Paths
set :root, File.dirname(__FILE__)
set :views, File.dirname(__FILE__) + '/views'
set :controlers, File.dirname(__FILE__) + '/controlers'
set :public_folder, Proc.new { File.join(root, "static") }

# Includes Folder
includes = File.dirname(__FILE__) + '/includes'

get '/' do
    Liquid::Template.file_system = Liquid::LocalFileSystem.new(includes)
    Liquid::Template.parse(includes).render
    liquid :index, :locals => { :title => "My Sinatra App"}
end

get '/test' do
    "This is the test page."
end

但我仍然得到:液体错误:非法模板名称''

这是我的索引模板:

<html>
    {% include 'header' %}
    <body>
        <h1>{{ title }}</h1>

        {{content}}
    </body>
</html>

这是标题部分模板:

<head>
    <title>{{ title }}</title>
</head>

我该如何解决?感谢您的每一个回复。

1 个答案:

答案 0 :(得分:1)

get '/'路线中,在我看来,第一行应该在配置块中,并且根本不需要第二行,因为Tilt / Sinatra应该负责调用{ {1}},例如

render

或者,如果你想要一个带有partials / includes等子目录的视图目录,比如configure do set :views, File.join(File.dirname(__FILE__),'/includes') # or just put these in the views dir end get '/' do liquid :index, :locals => { :title => "My Sinatra App"} end ,你可以将视图文件夹作为选项传递,例如。

"./views/includes"

或者您可以尝试Sinatra Partial(我是维护者)。


由于上述方法不起作用(见评论),我查看了Sinatra tests for Liquid并使用了OP的代码。我发现以下内容对我有用:

get '/' do
  liquid :index, :locals => { :title => "My Sinatra App"}, :views => File.join(File.dirname(__FILE__),'views/includes') 
end