Вложенные шаблоны и фильтр include
Фильтр include позволяет добавить в один шаблон другой шаблон.
Название подключаемого шаблона передается фильтру в качестве параметра:
{% include подключаемый_файл %}
Создадим файл blog/banner.html и добавим в него простейший код:
<div>Рекламный баннер</div>
В другом файле - base.html подключим данный шаблон:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>{% block title %}Default title{% endblock title %}</title>
</head>
<body>
<div><a href="/">Главная</a> | <a href="/about">О нас</a></div>
<h1>{% block header %}{% endblock header %}</h1>
<div>{% block content %}{% endblock content %}</div>
{% include "blog/banner.html" %}
<div>MyCorp. 2023. All rights reserved.</div>
</body>
</html>
В итоге при обращении к шаблону base.html на веб-странице появится содержимое из подключенного шаблона banner.html.
Стоит отметить, что вместо жесткой установки пути к вложенному шаблону в виде строки, можно использовать переменные:
{% include template_name %}
В данном случае предполагается, что template_name - это переменная, которая хранит путь к вложенному шаблону.
Передача данных
Во вложенные шаблоны также можно передавать некоторые данные.
Например, изменим код в banner.html следующим образом:
<div>{{ tutorial }} на {{ site }}</div>
Здесь используются переменные tutorial и site.
Теперь изменим код base.html, передав для этих переменных некоторые данные:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>{% block title %}Default title{% endblock title %}</title>
</head>
<body>
<div><a href="/">Главная</a> | <a href="/about">О нас</a></div>
<h1>{% block header %}{% endblock header %}</h1>
<div>{% block content %}{% endblock content %}</div>
{% include "blog/banner.html" with tutorial="Учу Django" site="Stepik.org" %}
<div>MyCorp. 2023. All rights reserved.</div>
</body>
</html>
Теперь на экране мы увидим строку Учу Django на Stepik.org: