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.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.
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