Atualizado: 10/12/2024

TemplateView - Django

Nos temas anteriores, discutimos como, ao receber uma solicitação, o sistema de roteamento seleciona a view apropriada, que, por sua vez, utiliza um template para gerar a resposta. Contudo, em situações onde o objetivo é apenas retornar o conteúdo de um template sem lógica adicional, não é necessário definir uma função para a view. O Django oferece o TemplateView, um class-based view que simplifica esse processo.

Configurando Templates

Considere os seguintes exemplos de templates básicos. Suponha que temos o arquivo about.html com o seguinte conteúdo:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Hello Django</title>
</head>
<body>
    <h1>About</h1>
</body>
</html>

E outro arquivo, contact.html, com o seguinte conteúdo:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Hello Django</title>
</head>
<body>
    <h1>Contact</h1>
</body>
</html>

A estrutura do projeto para este exemplo ficaria assim:

PROGRAMICIO
hello/
|-- migrations/
|-- templates/ 
        |-- about.html
        |-- contact.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 urls.py, as rotas podem ser configuradas da seguinte maneira:

from django.urls import path
from django.views.generic import TemplateView

urlpatterns = [
    path("about/", TemplateView.as_view(template_name="about.html")),
    path("contact/", TemplateView.as_view(template_name="contact.html")),
]

Aqui, o TemplateView atua como a view propriamente dita. O método as_view() é utilizado para especificar qual template será renderizado na resposta, por meio do parâmetro template_name.

Quando as URLs correspondentes são acessadas, os templates definidos em about.html e contact.html são renderizados diretamente, exibindo o conteúdo estático.

Navegador exibindo página estática retornada pelo servidor Django

Passando Dados para os Templates

O TemplateView também permite passar dados adicionais para os templates usando o parâmetro extra_context no método as_view(). Esses dados devem ser fornecidos como um dicionário. Veja o exemplo abaixo:

from django.urls import path
from django.views.generic import TemplateView

urlpatterns = [
    path("about/", TemplateView.as_view(template_name="about.html", 
        extra_context={"header": "Sobre o site"})),
    path("contact/", TemplateView.as_view(template_name="contact.html")),
]

No caso acima, o objeto header, que contém a string "Sobre o site", é enviado para o template about.html. Este valor pode ser utilizado no template com a seguinte estrutura:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Hello Django</title>
</head>
<body>
    <h1>{{ header }}</h1>
</body>
</html>
Navegador exibindo TemplateView retornado pelo servidor Django

Conclusão

O TemplateView é ideal para renderizar páginas simples, como páginas informativas ou estáticas, sem a necessidade de lógica adicional no lado do servidor. A funcionalidade de passar dados dinâmicos com extra_context amplia sua utilidade, permitindo uma abordagem flexível e eficiente para casos em que lógica mínima é necessária. Isso torna o TemplateView uma solução prática para diversas situações no desenvolvimento com 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