Atualizado: 14/12/2024

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. O conteúdo do arquivo pode ser:

<!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 e message precisam ser fornecidas pela view. Para isso, na função de view, o terceiro parâmetro da função render é usado para enviar os dados. Este parâmetro, chamado de context, é um dicionário que contém as variáveis. Um exemplo de configuração no arquivo 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 e message são inseridas no dicionário data, que é passado para o template como contexto. Ao acessar a aplicação no navegador, o conteúdo definido será exibido conforme a estrutura do template.

Navegador exibindo template dinâmico retornado pelo servidor Django

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 correspondente poderia ser estruturado da seguinte maneira:

<!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 e address são, respectivamente, uma lista e uma tupla. Os elementos desses objetos podem ser acessados por seus índices, exatamente como em Python. Já o dicionário user permite acesso aos valores por meio de suas chaves (name e age).

Navegador exibindo dados complexos inseridos no template pelo Django

Usando a Classe TemplateResponse

Além da função render, é possível utilizar templates com a classe TemplateResponse. Os dados são passados diretamente no construtor:

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 pode ser usada para adicionar lógica adicional no processamento do template antes de renderizá-lo.

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 possui um atributo name inicializado pelo construtor. Na função index, um objeto da classe é criado e passado ao template com a chave person. O template pode acessar atributos e métodos do objeto como no exemplo:

<!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 criado na view.

Navegador exibindo objeto de classe inserido no template pelo servidor Django
Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com