Django: Vistas y plantillas

Guía completa para entender el patrón MVC-MVT en Django, crear vistas y trabajar con las plantillas usando Django Template Language para desarrollar aplicaciones web de forma ordenada.

Aprende Django GRATIS y certifícate

En Django, se suele hablar de un patrón MVC (Modelo-Vista-Controlador), aunque la organización real se aproxima más al esquema MVT (Modelo-Vista-Plantilla). Este enfoque ofrece una separación clara entre la lógica de datos, la lógica de presentación y la parte que actúa como “controlador” dentro del framework.

Cada vista en Django se encarga de procesar la petición y devolver una respuesta apropiada. Para ello, es habitual utilizar funciones o clases que reciben el objeto request y, finalmente, usan la función render() para integrar datos con una plantilla. Con este paso, la respuesta HTTP queda ensamblada de forma limpia y controlada.

“El trabajo con vistas y plantillas es esencial para estructurar la presentación de la aplicación.”

Para definir una vista, se suele crear un archivo views.py dentro de la aplicación correspondiente. Un ejemplo básico podría ser:

from django.shortcuts import render

def vista_inicial(request):
    contexto = {
        'titulo': 'Bienvenido a mi sitio',
        'mensaje': 'Hola desde Django'
    }
    return render(request, 'mi_plantilla.html', contexto)

En este ejemplo, la vista llama a render() para combinar la información de contexto con la plantilla mi_plantilla.html. El Django Template Language te permite mostrar variables, controlar flujos lógicos o incluir bloques dinámicos en la salida HTML.

Cuando hablamos de plantillas, nos referimos a los archivos HTML que utilizan las etiquetas y sintaxis del Django Template Language. Dentro de la carpeta templates, podrás crear tu propio diseño y aprovechar la capacidad de herencia mediante las etiquetas {% extends %} y {% block %}. Un ejemplo de uso sería:

{% extends "base.html" %}
{% block content %}
  <h1>{{ titulo }}</h1>
  <p>{{ mensaje }}</p>
{% endblock content %}

La herencia de plantillas permite definir estructuras comunes en un archivo base e incluir secciones específicas en distintas páginas. De esta forma, tu código resulta más organizado y es más sencillo de mantener. Además, se recomienda mantener las plantillas en una carpeta dedicada, habitualmente llamada templates, para separar correctamente la capa de presentación de otras partes de tu proyecto.

Las etiquetas más comunes en el Django Template Language son {% %} para la lógica y {{ }} para la interpolación de variables. También cuentas con estructuras de control como {% if %}, {% for %} y la capacidad de incluir otras plantillas con {% include "ruta.html" %}. Mantener tus archivos de plantillas bien estructurados hace que el proyecto sea legible y facilita el trabajo en equipo.

Para conectar estas vistas con las URL, se configura un archivo urls.py, donde se definen las rutas de acceso y se enlazan con las funciones o clases que devuelven una respuesta. Ejemplo:

from django.urls import path
from .views import vista_inicial

urlpatterns = [
    path('', vista_inicial, name='vista_inicial'),
]

Una de las ventajas más destacadas de este patrón es la clara separación entre las vistas y las plantillas. Al seguir este diseño, cada elemento tiene su responsabilidad específica: los modelos para la lógica de datos, las vistas para la lógica de negocio y las plantillas para la lógica de presentación.

En un flujo de trabajo habitual, la vista procesa la petición, obtiene los datos de los modelos o de cualquier fuente externa, y los pasa a la plantilla. Luego, el Django Template Language sustituye las variables o procesa las etiquetas antes de generar el HTML definitivo.

A modo de buenas prácticas, se suele:

  • Separar la lógica intensiva en archivos de utilidad o en funciones específicas para no sobrecargar las vistas.
  • Mantener los archivos urls.py, views.py y templates organizados con nombres descriptivos, facilitando la búsqueda de cada elemento.
  • Utilizar nombres coherentes para los bloques en las plantillas, como {% block content %} o {% block sidebar %}, para mantener la consistencia.

La combinación de vistas y plantillas en Django garantiza un ciclo de desarrollo fluido. Con este enfoque, se reduce la complejidad y se logra una mejor división de responsabilidades, acorde al modelo MVC que inspira el framework.

Empezar curso de Django

Lecciones de este módulo de Django

Lecciones de programación del módulo Vistas y plantillas del curso de Django.

Ejercicios de programación en este módulo de Django

Evalúa tus conocimientos en Vistas y plantillas con ejercicios de programación Vistas y plantillas de tipo Test, Puzzle, Código y Proyecto con VSCode.