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

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

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

Передача данных из родительского шаблона

Вложенные шаблоны автоматически подхватывают данные их родительских шаблонов.

Например, возьмем ранее добавленый шаблон banner.html и изменим его следующим образом:

<div>Руководство по {{ tutorial }} на {{ site }}</div>


В файле views.py изменим функции-представления:

from django.shortcuts import render


def index(request):
    return render(request, "blog/index.html", context={"site": "Stepik.org"})


def about(request):
    return render(request, "blog/about.html", context={"site": "Stepik"})


Теперь изменим код 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" %}
    <div>MyCorp. 2023. All rights reserved.</div>
</body>
</html>


То есть часть данных мы передаем напрямую из базового шаблона, а часть через представления. Запустим сервер и проверим работу:


Однако это поведение не всегда удобно. Мы можем запретить автоматическую передачу данных из родительского во вложенный шаблон, используя оператор only:

{% include "blog/banner.html" with tutorial="Python" only %}

В этом случае шаблон banner.html не получит данные по ключу site:


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

По этой фразе не сразу понятно о чем речь:

Предлагаю добавить скрин для наглядности:

@Максим_Михеев, добавили, спасибо за помощь в улучшении курса.

Тут наверное стоит исправить на "blog/banner.html"

@Максим_Михеев, Исправили. Спасибо.

Здравствуйте, судя по скриншоту в коде должно быть указано: "Django"

@Максим_Михеев, Все верно, исправил.

Тут надо добавить: "... и изменим его следующим образом:"

так как ранее добавленный шаблон выглядит так:

@Максим_Михеев, добавил, спасибо.