如何使用Sinatra和Slim进行模板继承?

时间:2014-05-20 01:46:33

标签: ruby sinatra slim-lang

使用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做到这一点?

1 个答案:

答案 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

就是这样。效果很好。您甚至可以使用多个部分或嵌套它们。无论你喜欢什么。