Фильтр include позволяет добавить в один шаблон другой шаблон. Название подключаемого шаблона передается фильтру в качестве параметра:
{% include подключаемый_файл %}
Допустим, в приложении у нас имеются два шаблона: index.html и banner.html
Пусть в файле banner.html будет какой-нибудь простейший код:
<div>Руководство по Django на METANIT.COM</div>
В другом файле - index.html подключим данный шаблон:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Django on METANIT.COM</title> </head> <body> <h2>Главная страница</h2> {% include "banner.html" %} </body> </html>
В итоге при обращении к шаблону index.html на веб-странице появится содержимое из подключенного шаблона banner.html
Стоит отметить, что вместо жесткой установки пути к вложенному шаблону в виде строки, можно использовать переменные:
{% include template_name %}
В данном случае предполагается, что template_name - это переменная, которая хранит путь к вложенному шаблону.
Во вложенные шаблоны также можно передавать некоторые данные. Например, изменим код в banner.html следующим образом:
<div>Руководство по {{ tutorial }} на {{ site}}</div>
Здесь используются переменные tutorial и site. Теперь изменим код index.html, передав для этих переменныъ некоторые данные:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Django on METANIT.COM</title> </head> <body> <h2>Главная страница</h2> {% include "banner.html" with tutorial="Python" site="METANIT.COM" %} </body> </html>
Для передачи данных для фильтра определяются две переменных: tutorial и site. Объявление переменных идет после оператора with.
Вложенные шаблоны автоматически подхватывают данные их родительских шаблонов. Например, возьмем выше определенный шаблон banner.html:
<div>Руководство по {{ tutorial }} на {{ site}}</div>
В файле views.py определим следующую функцию-представление:
from django.shortcuts import render def index(request): return render(request, "index.html", context={"site":"METANIT.COM"})
Здесь в шаблон index.html передается элемент site. Теперь изменим код index.html:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Django on METANIT.COM</title> </head> <body> <h2>Главная страница</h2> {% include "banner.html" with tutorial="Python" %} </body> </html>
Теперь для шаблона banner.html НЕ создается переменная site, потому что вложенный шаблон автоматически получить данные по ключу "site" из родительского шаблона index.html. Однако это поведение не всегда удобно. Мы можем запретить автоматическую передачу данных из родительского во вложенный шаблон, используя оператор only:
{% include "banner.html" with tutorial="Python" only %}
В этом случае шаблон banner.html не получит данные по ключу "site"