Templates Aninhados. Filtro include - Django
O filtro include
{% include "nome_do_template" %}
Por exemplo, considere dois templates em um projeto Django: index.html
banner.html
PROGRAMICIO hello/ |-- migrations/ |-- templates/ |-- banner.html |-- index.html |-- __init__.py |-- admin.py |-- apps.py |-- models.py |-- tests.py |-- views.py programicio/ |-- __init__.py |-- asgi.py |-- settings.py |-- urls.py |-- wsgi.py
No arquivo banner.html
<div>Guia de Django em www.programicio.com</div>
No arquivo index.html
banner.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Django em www.programicio.com</title>
</head>
<body>
<h2>Página Inicial</h2>
{% include "banner.html" %}
</body>
</html>
Quando o navegador acessa index.html
banner.html
include
Vale ressaltar que, ao invés de especificar diretamente o caminho do template como uma string fixa, é possível utilizar uma variável para determinar qual template será incluído:
{% include template_name %}
Nesse cenário, espera-se que template_name
Enviando Dados para Templates Aninhados
Templates aninhados podem receber dados adicionais. Modificamos o template banner.html
<div>Guia de {{ tutorial }} em {{ site }}</div>
O código de index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Django em www.programicio.com</title>
</head>
<body>
<h2>Página Inicial</h2>
{% include "banner.html" with tutorial="Python" site="www.programicio.com" %}
</body>
</html>
As variáveis tutorial
site
with
Herança de Dados
Templates aninhados herdam automaticamente variáveis e dados fornecidos pelo template pai, a menos que explicitamente configurado de outra forma. Por exemplo, considere o template banner.html
<div>Guia de {{ tutorial }} em {{ site }}</div>
No arquivo views.py
site
index.html
from django.shortcuts import render
def index(request):
return render(request, "index.html", context={"site": "www.programicio.com"})
Com essa configuração, o código de index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Django em www.programicio.com</title>
</head>
<body>
<h2>Página Inicial</h2>
{% include "banner.html" with tutorial="Python" %}
</body>
</html>
No template banner.html
index.html
Controle sobre a Herança de Dados
Se a herança automática de variáveis do template pai para o template aninhado não for desejada, o operador only
{% include "banner.html" with tutorial="Python" only %}
Nesse caso, o template banner.html
with