En Django, las plantillas (templates) son archivos que combinan HTML estático con datos dinámicos para generar respuestas HTTP. El sistema de plantillas permite separar la lógica de negocio de la presentación, facilitando el mantenimiento y la reutilización del código.
Django utiliza su propio lenguaje de plantillas (Django Template Language, DTL), que extiende el HTML con etiquetas especiales, variables y filtros. Las variables se escriben como {{ variable }}, mientras que las etiquetas de control como {% if %}, {% for %} o {% block %} permiten condicionales, bucles y herencia.
Las plantillas pueden contener:
- HTML estándar: define la estructura y el diseño visual.
- Variables: insertan valores dinámicos recibidos desde la vista.
- Etiquetas: realizan operaciones como iteraciones, condiciones o carga de estáticos.
- Filtros: modifican la salida de una variable (ej.
{{ nombre|upper }}). - Herencia e inclusión: permiten reutilizar partes comunes a través de
{% extends %}y{% include %}.
Beneficios principales del uso de plantillas:
- Separación de responsabilidades: la vista se ocupa de la lógica, la plantilla de la presentación.
- Reutilización: mediante herencia y bloques se evita repetir código HTML.
- Flexibilidad: los mismos datos pueden renderizarse con diferentes plantillas sin cambiar la vista.
- Mantenibilidad: los diseñadores y desarrolladores pueden trabajar en paralelo.
Ejemplo de una plantilla sencilla que lista usuarios. Supongamos que guardamos este archivo en templates/miapp/lista_usuarios.html:
<html>
<head>
<meta charset="UTF-8">
<title>{{ titulo }}</title>
</head>
<body>
<h1>{{ titulo }}</h1>
{% if usuarios %}
<ul>
{% for usuario in usuarios %}
<li>
<a href="/perfil/{{ usuario.username }}">
{{ usuario.username }} - {{ usuario.email }}
</a>
</li>
{% endfor %}
</ul>
{% else %}
<p>No hay usuarios registrados.</p>
{% endif %}
</body>
</html>
La vista correspondiente en views.py podría ser:
from django.shortcuts import render
def lista_usuarios(request):
datos = [
{'username': 'juanp', 'email': 'juan@example.com'},
{'username': 'maria_l', 'email': 'maria@test.org'}
]
contexto = {
'titulo': 'Lista de usuarios',
'usuarios': datos
}
return render(request, 'miapp/lista_usuarios.html', contexto)
La función render() combina la plantilla con el contexto y devuelve un objeto HttpResponse con el HTML resultante.
Para que Django encuentre la plantilla, debe ubicarse en la carpeta templates dentro de la aplicación, o en una ruta definida en DIRS de la configuración TEMPLATES.
Finalmente, en el archivo de rutas (urls.py) se asocia la vista a una URL:
from django.urls import path
from . import views
urlpatterns = [
path('usuarios/', views.lista_usuarios, name='lista_usuarios'),
]
Al acceder a /usuarios/ se renderizará la página con los datos proporcionados.