- ¿Qué es una plantilla?
- ¿Por qué usar un sistema de plantillas?
- Configurando las plantillas en Django
- Plantillas específicas de cada aplicación
- Contexto: cómo pasan los datos a una plantilla
- Sintaxis básica de una plantilla 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
templatesen 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.
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.
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:
- Agrega una plantilla separada para
codica_django_blog.article.views.index. Ubícala en el directoriotemplates/articlesdentro de la aplicacióncodica_django_blog.article. - En la plantilla, muestra el nombre de la aplicación usando variables sustituidas (por ejemplo,
{{ app_name }}). - Pasa todos los valores necesarios a través del contexto desde la vista.
Materiales adicionales
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.