我是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>
我该如何解决?感谢您的每一个回复。
答案 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