Los context processors en Django son funciones que inyectan variables adicionales en el contexto de todas las plantillas de una aplicación. Estas variables se hacen disponibles de manera global, lo que permite acceder a ellas en todas las plantillas sin tener que pasarlas explícitamente en cada vista.
Los context processors son funciones que devuelven un diccionario de variables, el cual se añade automáticamente al contexto de todas las plantillas renderizadas por el sistema de plantillas de Django. Esto es útil cuando necesitas que cierta información, como configuraciones, el usuario actual o parámetros globales, esté disponible en cada plantilla sin necesidad de repetir el mismo código en todas las vistas.
Django incluye varios context processors por defecto, pero también puedes crear los tuyos personalizados.
Para usar los context processors en Django, se requiere que estén definidos en la configuración de tu proyecto y que las plantillas sean renderizadas usando RequestContext
o funciones que lo utilicen automáticamente, como render
.
Django ya incluye varios context processors listos para usar, como por ejemplo:
django.template.context_processors.debug
: Proporciona detalles de depuración si DEBUG=True
.
django.template.context_processors.request
: Incluye la variable request
en todas las plantillas.
django.template.context_processors.static
: Hace disponible la URL de los archivos estáticos.
Puedes habilitarlos en el archivo settings.py
bajo la clave TEMPLATES
, en la opción context_processors
.
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.template.context_processors.static',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
Supongamos que quieres hacer disponible una variable site_name
en todas las plantillas de tu proyecto. Puedes crear un context processor personalizado de la siguiente manera:
1. Crear la función del context processor:
En un archivo, por ejemplo context_processors.py
, dentro de tu aplicación:
def site_info(request):
return {
'site_name': 'Mi Sitio Web',
'contact_email': 'contacto@misitio.com',
}
2. Registrar el context processor en settings.py
:
Añade la ruta del nuevo context processor a la configuración de plantillas en TEMPLATES
:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'OPTIONS': {
'context_processors': [
# Otros context processors por defecto
'mi_app.context_processors.site_info',
],
},
},
]
3. Usar la variable en una plantilla:
Después de haber registrado el context processor, las variables site_name
y contact_email
estarán disponibles en todas las plantillas:
<!DOCTYPE html>
<html lang="es">
<head>
<title>{{ site_name }}</title>
</head>
<body>
<p>Contáctanos en: {{ contact_email }}</p>
</body>
</html>
Los context processors son útiles cuando necesitas información que se reutiliza en todas las vistas, como el nombre del sitio, enlaces globales de navegación, o datos del usuario autenticado.
Para más información sobre cómo usar y personalizar los context processors en Django, visita la documentación oficial de Django sobre context processors.
Jorge García
Fullstack developer