Regístrate para acceder a más de 15 cursos gratuitos de programación con un simulador

Plantillas Desarrollo con el framework Django

En esta lección, aprenderás cómo Django utiliza plantillas para construir páginas web. Aunque JavaScript es clave para la interacción, HTML sigue siendo fundamental. Django usa un sistema de plantillas para generar páginas HTML de forma eficiente.

Veremos cómo funcionan las plantillas, cómo organizar bien tus archivos y cómo evitar confusiones en proyectos grandes.


¿Qué es una plantilla?

La plantilla (template) es como un documento HTML “a medio terminar”. Tiene dos partes:

  • Partes fijas: las que no cambian, como etiquetas HTML.
  • Partes variables: son secciones del documento que se completan con datos dinámicos que llegan desde el servidor (por ejemplo, el título de una página o la lista de artículos).

Estas partes variables se escriben usando una especie de mini-lenguaje especial de Django que permite incluir condiciones (if), ciclos (for) y filtros que transforman datos.

Este lenguaje se conoce como lenguaje de plantillas o templating language.


¿Por qué usar un sistema de plantillas?

Cuando estamos construyendo una aplicación web, es común que haya una separación entre los datos y cómo se presentan en la pantalla. Por ejemplo:

  • El backend (el código de Python) genera datos: listas de objetos, fechas, textos, etc.
  • El frontend (la plantilla) decide cómo mostrar esos datos en HTML.

De esta forma, podemos tener varios diseños diferentes que usan los mismos datos, sin duplicar lógica.

Además, en Django, las plantillas no permiten ejecutar funciones ni lógica compleja. Esto es intencional para evitar que el código de presentación (las vistas) termine haciendo cosas que deberían manejarse en el backend.


Configurando las plantillas en Django

Django admite distintos motores (también llamados "backends") para trabajar con plantillas.

Por defecto incluye:

  • DjangoTemplates (el motor nativo de Django)
  • Jinja2 (una opción compatible, pero un poco más potente)

Puedes usar uno o varios en tu mismo proyecto.

La configuración se hace en el archivo settings.py, usando la lista TEMPLATES.

# settings.py

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'templates'],  # Carpetas adicionales con plantillas
        'APP_DIRS': True,  # Busca dentro de cada aplicación
        'OPTIONS': {
            # Configuraciones extras del motor
        },
    },
]

¿Qué significan estas opciones?

Configuración Descripción
BACKEND Define qué motor de plantillas usar.
DIRS Lista de rutas con carpetas donde buscar plantillas adicionales.
APP_DIRS Si está en True, busca plantillas dentro de cada app en /templates.
OPTIONS Detalles adicionales de configuración (como filtros o procesadores de contexto).

Ubicación recomendada de plantillas

  • Las plantillas generales del sitio deberían ir en una carpeta templates en la raíz del proyecto.
  • Las plantillas de apps reutilizables deben estar en nombre_app/templates/nombre_app/.

Esto evita que dos plantillas con el mismo nombre se confundan o se sobreescriban.


Plantillas específicas de cada aplicación

Supongamos que tienes una app llamada codica_django_blog. Dentro debe haber una carpeta templates con tus archivos HTML:

codica_django_blog/
└── templates/
    └── index.html

Django podrá encontrar estas plantillas automáticamente si APP_DIRS está en True.

También puedes manejar qué plantilla se usa cuando hay dos con el mismo nombre controlando el orden de las apps en INSTALLED_APPS, ya que Django busca en ellas en ese mismo orden.


Contexto: cómo pasan los datos a una plantilla

Cuando usamos render() en una vista de Django, le pasamos los datos que queremos mostrar en la plantilla. Esto se hace a través de un diccionario llamado contexto.

# views.py

def about(request):
    tags = ['educación', 'programación', 'python', 'oop']
    return render(request, 'about.html', context={'tags': tags})

Y en la plantilla:

<!-- about.html -->

<h1>Sobre el Blog</h1>
<p>Este blog explora experimentos con Django en Códica.</p>
<p>{{ tags|join:", " }}</p>

En este ejemplo, usamos el filtro join para unir los elementos de la lista tags, separados por comas.


¿Y si quiero que todas mis plantillas tengan acceso al mismo tipo de datos?

Por ejemplo, ¿qué pasa si todas las plantillas necesitan acceder al objeto request o saber si el sitio está en modo debug?

Ahí entran los context processors (procesadores de contexto). Son funciones que se ejecutan automáticamente cada vez que se va a renderizar una plantilla, y aportan datos adicionales al contexto.

Django ya viene con varios preconfigurados. Aquí algunos útiles:

Procesador Descripción
django.template.context_processors.request El objeto request actual
django.template.context_processors.debug La variable debug (modo desarrollo)

Se configuran así:

# settings.py

TEMPLATES = [
    {
        ...
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.request',
                'django.template.context_processors.debug',
                # ...otros que quieras usar...
            ],
        },
    },
]

Y si lo necesitas, también puedes crear los tuyos para pasar cosas como el idioma del usuario, configuraciones personalizadas, etc.


Sintaxis básica de una plantilla Django

Las plantillas son documentos HTML con pequeños trozos de código que se marcan con {{ ... }} para mostrar datos o con {% ... %} para estructuras como ciclos o condiciones.

Mostrar datos

<h1>{{ title }}</h1>
<p>{{ description }}</p>

Ciclos y condiciones

{% if items|length == 1 %}
  Solo hay un elemento
{% else %}
  Hay {{ items|length }} elementos
{% endif %}

{% for user in users %}
  <p>Usuario: {{ user.name }}</p>
{% endfor %}

Los valores como title, description o items vienen del contexto que se pasa desde la vista.

No se pueden ejecutar funciones dentro de las plantillas. Esto mantiene el diseño separado de la lógica de programación.



Resumen

  • La plantilla es un archivo HTML con partes dinámicas que se llenan con datos.
  • Los datos llegan al HTML a través del contexto, que es un diccionario.
  • Los filtros permiten transformar los datos de forma sencilla (ej. join, length).
  • Los context processors añaden información general automáticamente a todas tus plantillas.
  • La configuración de las plantillas se hace en settings.TEMPLATES.
  • Usa convenciones de diseño para evitar conflictos de nombres entre plantillas.

Trabajo independiente

Plantillas y contexto en Django

En esta actividad vas a trabajar con plantillas HTML y el contexto de vistas en Django. Sigue estos pasos:

  1. Agrega una plantilla separada para codica_django_blog.article.views.index. Ubícala en el directorio templates/articles dentro de la aplicación codica_django_blog.article.
  2. En la plantilla, muestra el nombre de la aplicación usando variables sustituidas (por ejemplo, {{ app_name }}).
  3. Pasa todos los valores necesarios a través del contexto desde la vista.

Materiales adicionales

  1. Plantillas de Django
  2. Etiquetas y filtros de Django

Para acceder completo a curso necesitas un plan básico

El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.

Obtener acceso
130
cursos
1000
ejercicios
2000+
horas de teoría
3200
test

Obtén acceso

Cursos de programación para principiantes y desarrolladores experimentados. Comienza tu aprendizaje de forma gratuita

  • 130 cursos, 2000+ horas de teoría
  • 1000 ejercicios prácticos en el navegador
  • 360 000 estudiantes
Al enviar el formulario, aceptas el «Política de privacidad» y los términos de la «Oferta», y también aceptas los «Términos y condiciones de uso»

Nuestros graduados trabajan en empresas como:

Bookmate
Health Samurai
Dualboot
ABBYY