Inserindo Dados em Templates - Django
No Django, uma das funcionalidades mais poderosas dos templates é a capacidade de exibir dados dinâmicos provenientes das views. Esses dados podem ser renderizados de várias formas no template, sendo a mais simples o uso de dupla chave:
{{ nome_do_objeto }}
Por exemplo, suponha que você tenha um projeto com uma pasta chamada templates contendo o arquivo index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Django no www.programicio.com</title>
</head>
<body>
<h2>{{ header }}</h2>
<p>{{ message }}</p>
</body>
</html>
Neste caso, as variáveis header
message
render
context
views.py
from django.shortcuts import render
def index(request):
data = {"header": "Hello Django", "message": "Welcome to Python"}
return render(request, "index.html", context=data)
No exemplo acima, as variáveis header
message
data
Inserindo Dados Mais Complexos
O Django também permite trabalhar com dados mais complexos ao passá-los para o template. Suponha que a função de view inclua os seguintes dados:
from django.shortcuts import render
def index(request):
header = "Informações do Usuário"
langs = ["Python", "Java", "C#"]
user = {"name": "Tom", "age": 23}
address = ("Rua Abricó", 23, 45)
data = {"header": header, "langs": langs, "user": user, "address": address}
return render(request, "index.html", context=data)
Nesse caso, os dados são organizados em um dicionário e enviados ao template. O arquivo index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Django no www.programicio.com</title>
</head>
<body>
<h1>{{ header }}</h1>
<p>Nome: {{ user.name }} Idade: {{ user.age }}</p>
<p>Endereço: Rua {{ address.0 }}, Nº {{ address.1 }}, Apt. {{ address.2 }}</p>
<p>Linguagens: {{ langs.0 }}, {{ langs.1 }}</p>
</body>
</html>
No exemplo, as variáveis langs
address
user
name
age
Usando a Classe TemplateResponse
Além da função render
TemplateResponse
from django.template.response import TemplateResponse
def index(request):
header = "Informações do Usuário"
langs = ["Python", "Java", "C#"]
user = {"name": "Tom", "age": 23}
address = ("Rua Abricó", 23, 45)
data = {"header": header, "langs": langs, "user": user, "address": address}
return TemplateResponse(request, "index.html", data)
A principal diferença é que a classe TemplateResponse
Passando Objetos de Classes
Também é possível passar objetos de classes personalizadas para o template. Considere o exemplo a seguir:
from django.shortcuts import render
class Person:
def __init__(self, name):
self.name = name
def index(request):
return render(request, "index.html", context={"person": Person("Tom")})
No exemplo, a classe Person
name
person
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Django no www.programicio.com</title>
</head>
<body>
<h1>Person: {{ person.name }}</h1>
</body>
</html>
O template exibirá o nome do objeto Person