Последние записи в блоге

Тег use

Наследование шаблонов является одним из мощных инструметов Twig, но оно огранично. Шаблон может быть унаследован только из другого шаблона. Это ограничение делает наследование шаблонов простым для понимания и легким для отслеживания:

{% extends "base.html" %}

{% block title %}{% endblock %}
{% block content %}{% endblock %}

Горизонтальное наследование, это способ достижения той же цели, как множественное наследование, но без соответствующей сложности:

{% extends "base.html" %}

{% use "blocks.html" %}

{% block title %}{% endblock %}
{% block content %}{% endblock %}

use говорит Twig импортировать блоки, определенные в blocks.html в текущий шаблон (это как макросы, но для блоков):

# blocks.html
{% block sidebar %}{% endblock %}

В этом примере, use импортирует боковую панели в основном шаблоне. Этот код эквивалентен следующему:

{% extends "base.html" %}

{% block sidebar %}{% endblock %}
{% block title %}{% endblock %}
{% block content %}{% endblock %}

Тег use импортирует шаблон, если оно не наследуется другим шаблоном, если он не определяет макросы, и если он не пустой. Но он может использовать другие шаблоны.

Главный шаблон также можете переопределить любой импортируемый блок. Если шаблон уже определяет блок sidebar, то sidebar в blocks.html игнорируется. Для того чтобы избежать конфликтов, можно переименовать импортируемые блоки:

{% extends "base.html" %}

{% use "blocks.html" with sidebar as base_sidebar %}

{% block sidebar %}{% endblock %}
{% block title %}{% endblock %}
{% block content %}{% endblock %}

Функция parent() автоматически определяет правильное дерево наследования, поэтому она может быть использована для переопределении блока в импортированных шаблонах:

{% extends "base.html" %}

{% use "blocks.html" %}

{% block sidebar %}
    {{ parent() }}
{% endblock %}

{% block title %}{% endblock %}
{% block content %}{% endblock %}

В этом примере parent() будет правильно наследовать блок sidebar от шаблона blocks.html.

Если два импортируемых шаблона содержат один и тот же блок, последний из подключеных имеет больший приоритет

Агрегатор фриланс бирж FreelanceGrab, искать заказы на фрилансе стало еще проще.
8 крупных бирж, удобный поиск и фильтрация по проектам,
моментальное обновление ленты без перезагрузки страницы