Ruby 如何使用Sinatra和Slim进行模板继承?
使用Sinatra和Slim,如何进行模板继承?我在谷歌上找不到答案,Slim上的文档也很少。假设我有以下文件: main.rbRuby 如何使用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 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中呈现模板,看起来您只能在另一个块中进行重新排序。