Django 5 для начинающих

Прогресс по курсу:  9/1004

2.7 Шаблоны, часть 2.
4 из 16 шагов пройдено
0 из 56 баллов  получено

Вложенные шаблоны и фильтр 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:


Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий

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

{% include template_name %}

В данном случае предполагается, что template_name - это переменная, которая хранит путь к вложенному шаблону.

__________________________________________________________________________________________________________________________________

Где и как создается эта переменная?

Изменен Александр Михайлов

@Александр_Михайлов, например передаётся в контексте, из представления:

return render(request, 'index.html', {'template_name': template_name})
Изменен Дмитрий Селезнев

@Дмитрий_Селезнев, спасибо. Не знал, что переменная запоминается на все уровни.

@Александр_Михайлов, точнее мы сами выбираем что передать в шаблон, и под каким именем. Ключ будет именем переменной в шаблоне.