Slim模板语言中的继承

时间:2013-05-30 18:20:06

标签: ruby-on-rails ruby sinatra slim-lang

使用Twig的PHP,我可以这样做:

layout.twig

<html>
<body>
{% block content %}{% endblock %}
</body>
</html>

form.twig

{% extends "layout.twig" %}
{% block content %}
<div class="form">{% block form %}{% endblock %}</div>
{% endblock %}

login.twig

{% extends form %}
{% block form %}
<form>
    <input type="text" name="email" />
    <input type="submit">
</form>
{% endblock %}

这样我就有了所有页面的布局,一个带有表单和登录页面的页面布局。

但是使用Slim我只能指定所有模板的父布局:

layout.slim

html
  body ==yield

以及我网站上每个页面的特殊布局:
login.slim

div.form
  form
    input type="text" name="email"
    input type="submit"

是否有一种简单的方法可以在Slim中实现具有多个级别的类似Twig的继承?

3 个答案:

答案 0 :(得分:7)

看起来我找到了Slim与Sinatra的解决方案:

layout.slim

html
  body
    == yield

form.slim

== slim :layout
  div.form
    == yield

login.slim

== slim :form
  form
    input type="text" name="email"
    input type="submit"

答案 1 :(得分:0)

我相信在Rails中它不存在类似模板继承的东西,但我认为没有必要使用yieldcontent_for方法。

例如,您可以使用_form.html.slim布局:

.form
  = yield

_login.html.slim部分:

form
  input type="text" name="email" 
  input type="submit"

当您想要使用表单布局显示登录时,您应该执行以下操作:

= render partial: "login", layout: "form"

答案 2 :(得分:0)

login.html.slim

= render layout: 'form' do
  form
    input type="text" name="email"
    input type="submit"