TemplateView no 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.pyNo 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.

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>
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.
Documentação oficial:
- TemplateView - Django