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

Ruby 如何使用Sinatra和Slim进行模板继承?,ruby,sinatra,slim-lang,Ruby,Sinatra,Slim Lang,使用Sinatra和Slim,如何进行模板继承?我在谷歌上找不到答案,Slim上的文档也很少。假设我有以下文件: main.rb # Sinatra app get '/login' do slim :login end get '/display' do slim :display end 布局。苗条 html body == yield div[id="parent_div"] div[id="child_div"] h3 R

使用Sinatra和Slim,如何进行模板继承?我在谷歌上找不到答案,Slim上的文档也很少。假设我有以下文件:

main.rb

# Sinatra app
get '/login' do
   slim :login
end

get '/display' do
   slim :display
end
布局。苗条

html
    body 
        == yield
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.
p Welcome to the login page
p Welcome to the display page
子单元布局。纤细

html
    body 
        == yield
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.
p Welcome to the login page
p Welcome to the display page
login.slim

html
    body 
        == yield
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.
p Welcome to the login page
p Welcome to the display page
显示。超薄

html
    body 
        == yield
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.
p Welcome to the login page
p Welcome to the display page
默认情况下,Slim将使用layout.Slim作为基础,因此在呈现登录和显示模板时将自动继承它

但是,我希望display.slim继承自sub_layout.slim,sub_layout.slim反过来继承layout.slimlogin.slim将直接从layout.slim继承,这是默认行为,因此这很好


如何使用Sinatra和Slim实现这一点?

您要求的是对布局文件的任意调用。有时候你想要,有时候你不想要。让西纳特拉很难知道下一步是什么

我建议您使用partials:

# in your app.rb
helpers do
  def partial(template, locals = {})
    slim template, :layout => false, :locals => locals
  end
end
然后可以使用常规布局文件,并在默认情况下调用它。和你一样

display.slim
中,您可以调用子布局部分:

==partial :sub_layout

就这样。效果很好。您甚至可以使用多个partial或嵌套它们。您喜欢什么都行。

谢谢,但是我如何使
显示.slim
sub\u layout.slim
的特定区域中进行渲染?我修改了我的问题
sub\u布局。slim
有一个
==yield
,如果tmeplate想要使用sublayout.hm,所有内容都应该放在那里。不知道。我不太明白你为什么想要这么复杂的东西。但我的第一个猜测是检查一下tilt:它负责在Sinatra中呈现模板,看起来您只能在另一个块中进行重新排序。