Наследование в языке шаблонов Slim

С PHP, используя Twig, я могу сделать что-то вроде этого:

layout.twig

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

форма.ветка

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

логин.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"

Есть ли простой способ реализовать Twig-подобное наследование с более чем одним уровнем в Slim?


person Community    schedule 30.05.2013    source источник


Ответы (3)


Похоже, я нашел решение для Slim с Sinatra:

layout.slim

html
  body
    == yield

форма.тонкий

== slim :layout
  div.form
    == yield

Логин.тонкий

== slim :form
  form
    input type="text" name="email"
    input type="submit"
person Community    schedule 30.05.2013

Я считаю, что в Rails не существует чего-то вроде наследования шаблонов, но я считаю, что это не обязательно с методами yield и content_for.

Например, у вас может быть макет _form.html.slim:

.form
  = yield

Частичное _login.html.slim:

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

И когда вы хотите отобразить логин с макетом формы, вы должны сделать что-то вроде:

= render partial: "login", layout: "form"
person Pigueiras    schedule 30.05.2013
comment
render :partial => ... специфичен для Rails, но я использую Sinatra. - person ; 30.05.2013
comment
@therussianphysicist Я этого не знал :). Но это может быть полезно для других людей. - person Pigueiras; 31.05.2013

логин.html.slim

= render layout: 'form' do
  form
    input type="text" name="email"
    input type="submit"
person user2599889    schedule 01.05.2015
comment
Можете ли вы добавить немного больше пояснений к своему ответу? - person Joe Kennedy; 01.05.2015