使用Sinatra和Slim,我该如何进行模板继承?我在Google上找不到答案,而Slim上的文档很少。假设我有以下文件:
main.rb的
# Sinatra app
get '/login' do
slim :login
end
get '/display' do
slim :display
end
layout.slim
html
body
== yield
sub_layout.slim
div[id="parent_div"]
div[id="child_div"]
h3 Rendering content
== yield
p display.slim should be rendered in == yield
div[id="child_div"]
h1 Rendering stuff in sublayout
p Hello this div should go underneath the above div.
login.slim
p Welcome to the login page
display.slim
p Welcome to the display page
默认情况下,Slim将使用 layout.slim 作为基础,因此在呈现登录和显示模板时它将自动继承。
但是,我希望 display.slim 继承 sub_layout.slim ,然后继承 layout.slim 。 login.slim 会直接从 layout.slim 继承,这是默认行为,所以这很好。
我如何使用Sinatra和Slim做到这一点?
答案 0 :(得分:1)
您要求的是对布局文件的任意调用。有时你想要它有时你不想要它。让Sinatra很难知道下一步是什么。
我建议你使用partials:
# in your app.rb
helpers do
def partial(template, locals = {})
slim template, :layout => false, :locals => locals
end
end
然后您可以使用常规布局文件并默认调用它。和你一样。
在display.slim
中,您可以调用子布局部分:
==partial :sub_layout
就是这样。效果很好。您甚至可以使用多个部分或嵌套它们。无论你喜欢什么。