Передача данных из родительского шаблона
Вложенные шаблоны автоматически подхватывают данные их родительских шаблонов.
Например, возьмем ранее добавленый шаблон 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: