El siguiente artículo es la parte 6 de la serie de exploración de vistas basadas en clases (CBV) de Django, donde abordamos cómo automatizar el renderizado de páginas simples y el manejo de redirecciones mediante TemplateView y RedirectView. Si en el artículo anterior (parte 5) construiste un CRUD usando CreateView
, UpdateView
y DeleteView
, en esta ocasión veremos cómo organizar de manera eficiente páginas más ligeras y manejo de redirecciones.
Haz clic en el siguiente enlace para acceder al artículo anterior!
Implementar CRUD con CreateView, UpdateView y DeleteView
“Automatiza la estructura de páginas simples y redirecciones fácilmente con Django TemplateView y RedirectView!”
1. TemplateView & RedirectView, ¿por qué son necesarios?
TemplateView y RedirectView son vistas basadas en clases especializadas en los casos de uso más simples en Django.
-
TemplateView
-
Es útil cuando deseas pasar una página estática o un contexto simple a la plantilla sin lógica de procesamiento de datos adicional.
-
Ej) Página “Acerca de”, página “FAQ”, páginas de error como 404/500 (si se configuró por separado).
-
-
RedirectView
-
Se utiliza para redirigir inmediatamente a una URL específica.
-
Ej) Redirigir a una página específica al acceder a la raíz del dominio (
/
), servicio sencillo de URL corta, redirección para promover campañas, etc.
-
Ambos se centran en el manejo de páginas simples que no requieren manipulación de bases de datos o validación de formularios, lo que los distingue de las vistas mencionadas anteriormente como FormView
y CreateView
.
2. Uso de TemplateView
2.1 Estructura básica
# views.py
from django.views.generic import TemplateView
class HomePageView(TemplateView):
template_name = 'home.html'
-
template_name
: Especifica la ruta del archivo de plantilla que se renderizará. -
No es necesario sobrescribir el método
get()
; por defecto, al recibir una solicitud GET, se renderizará la plantilla especificada entemplate_name
.
2.2 Conexión en urls.py
# urls.py
from django.urls import path
from .views import HomePageView
urlpatterns = [
path('', HomePageView.as_view(), name='home'),
]
- Se mostrará la plantilla
home.html
al acceder a la URL raíz (""
).
2.3 Ejemplo de plantilla: home.html
<!DOCTYPE html>
<html>
<head>
<title>Página Principal</title>
</head>
<body>
<h1>¡Hola! Esta es la página principal.</h1>
</body>
</html>
3. Pasando datos de contexto en TemplateView
Además del simple renderizado de plantillas, cuando deseas pasar variables simples a la plantilla, sobrescribes el método get_context_data()
.
from django.views.generic import TemplateView
class AboutPageView(TemplateView):
template_name = 'about.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['page_title'] = 'Acerca de Nosotros'
context['description'] = 'Este sitio es un ejemplo para presentar Django CBV.'
return context
Entonces puedes usar las variables page_title
y description
en la plantilla:
<!-- about.html -->
<!DOCTYPE html>
<html>
<head>
<title>{{ page_title }}</title>
</head>
<body>
<h1>{{ page_title }}</h1>
<p>{{ description }}</p>
</body>
</html>
Consejo:
TemplateView es especialmente útil para crear páginas simples que no requieren consultas a la base de datos,
Además, si necesitas variables comunes en varias plantillas, considera combinarlas con Mixin o una plantilla base.
4. Uso de RedirectView
4.1 Estructura básica
# views.py
from django.views.generic import RedirectView
class BlogRedirectView(RedirectView):
pattern_name = 'blog_list' # Nombre de la URL
# (Opcional) Puedes especificar parámetros necesarios al hacer reverse de la URL
# query_string = True # Mantener query string
# permanent = False # Redirección permanente o no (301 vs 302)
-
pattern_name
: Al especificar el nombre de la URL (por ejemplo,'blog_list'
) deurls.py
, se redirigirá a esa ruta al ejecutar la vista. -
Si estableces
permanent=True
, hará una redirección permanente (301); si se deja como valor por defecto (False
), será una redirección temporal (302). -
Si estableces
query_string=True
, también añadirá la cadena de consulta de la URL existente (?page=2
, etc.) en la URL de redirección.
4.2 Conexión en urls.py
# urls.py
from django.urls import path
from .views import BlogRedirectView, HomePageView
urlpatterns = [
path('go-to-blog/', BlogRedirectView.as_view(), name='go_to_blog'),
path('', HomePageView.as_view(), name='home'),
]
- Al acceder a
/go-to-blog/
, se redirigirá a la URL patrón especificada como'blog_list'
.
4.3 Especificar URL directamente
No solo puedes usar el nombre de URL, sino que también puedes introducir rutas absolutas o enlaces externos directamente en la propiedad url
.
class ExternalRedirectView(RedirectView):
url = 'https://www.djangoproject.com/'
urlpatterns = [
path('django-home/', ExternalRedirectView.as_view(), name='django_home'),
]
- Esto redirigirá de
/django-home/
ahttps://www.djangoproject.com/
.
5. Ejemplos de TemplateView & RedirectView
-
Página de anuncios: Puedes utilizar
TemplateView
para mostrar una página estática con contenido fijo de anuncios sin conectarte a la base de datos. -
Página de FAQ / ‘Próximamente’: También es útil para mostrar rápidamente FAQs de productos o páginas de mantenimiento temporal.
-
Redirección de la raíz del dominio: Puedes automatizar lógicas de redirección simples como “redirigir a /home/ al acceder a la página principal” con
RedirectView
. -
Conexión a enlaces de servicios externos: Igualmente útil como URLs cortas, cuando rediriges a sitios externos al visitar una ruta específica.
6. Comparación con FBV
Función | FBV (vista basada en funciones) | TemplateView / RedirectView (vista basada en clases) |
---|---|---|
Renderizado de páginas estáticas (ej: FAQ) | def faq(request): return render(request, 'faq.html') y así sucesivamente |
TemplateView: solo necesitas especificar template_name para un renderizado automático |
Redirección simple | return redirect('some_url') / HttpResponseRedirect(...) usados |
RedirectView: solo con especificar una URL o pattern_name es suficiente |
Transmisión de contexto adicional | Cada vez context = {...} -> render(...) se maneja de forma directa |
Mediante get_context_data() puedes gestionar de manera estructural y coherente |
Estructura de código / Mantenimiento | Para páginas cortas o redirecciones simples, FBV funciona correctamente, pero aparece redundancia si hay muchas páginas estáticas o redirecciones. | “Las configuraciones necesarias están separadas como propiedades o métodos”, lo que facilita el mantenimiento. |
Productividad en desarrollo (palabras clave clave) | “Usar funciones de renderizado, redirección -> posibilidad de redundancia” | “Ahorro de tiempo, coherencia en el código y facilidad de mantenimiento” |
7. Conclusiones y adelanto del siguiente artículo
TemplateView y RedirectView son vistas basadas en clases que ayudan a gestionar el manejo más simple de páginas en proyectos de Django.
Cuando no se necesita lógica compleja como la interacción con la base de datos o la validación de formularios, su uso puede reducir el código duplicado y mantener la estructura del proyecto más limpia.
¡Ahora podemos implementar la mayoría de los elementos esenciales del desarrollo web usando CBV, como “páginas estáticas”, “redirecciones”, “CRUD (crear/editar/eliminar)”, “listados/detalles” y “manejo de formularios”!
En el siguiente artículo (parte 7 de la serie), planeo presentar cómo reutilizar fácilmente funciones comunes en Django utilizando Mixin, así como implementar de manera eficiente la gestión de permisos y la verificación de inicio de sesión.
Revisar el artículo anterior
- Clase basada en vistas (CBV) serie de exploración #1 - Razón para pasar de FBV a CBV y la mentalidad del desarrollador
- Clase basada en vistas (CBV) serie de exploración #2 - Entendiendo la clase de vista básica de Django
- Clase basada en vistas (CBV) serie de exploración #3 - Manejo fácil de formularios con FormView
- Clase basada en vistas (CBV) serie de exploración #4 - Uso de ListView & DetailView
- Clase basada en vistas (CBV) serie de exploración #5 - Implementando CRUD con CreateView, UpdateView y DeleteView
“Automatiza el manejo incómodo de páginas estáticas y redirecciones con TemplateView y RedirectView,
¡y haz que tu proyecto sea más conciso y productivo!”
No hay comentarios.