El contexto es un «conjunto de variables» que envías a tus templates a través de las vistas. Estas variables solo pueden ser accedidas por un template específico. Pero, que sucede si nuestro proyecto requiere variables que estén disponibles en todos los templates. No conviene estar agregando el mismo conjunto de elementos en cada contexto de cada vista. Lo que necesitamos es crear un contexto global, es decir, un conjunto de variables globales que todas las plantillas podrán usar.
Entonces, ¿cómo se creo un contexto global? Aquí los context processors entran al rescate.
¿Qué son los Context Processors?
Un procesador de contexto es sencillamente una función que recibe un argumento request
y retorna un diccionario de elementos (contexto).
def mi_context_processor(request):
return {
"foo": "bar",
}
Lenguaje del código: Python (python)
La variable user
es un ejemplo de variable global definida en un context processor. Esta nos retorna el usuario que se encuentra logueado actualmente. Puedes acceder a esta variable desde cualquier template de tu proyecto. ¡Pruébalo!
<h1>{{ user.username }}</h1>
Lenguaje del código: HTML, XML (xml)
El context processor auth
contiene un conjunto de variables, entre ellas esta la variable user
que usamos anteriormente. Puedes encontrarla en tu settings.py
de esta forma:
django.contrib.auth.context_processors.auth
Lenguaje del código: Bash (bash)
Crea tu propio Context Processor
Crearemos una variable global que nos retorne el año actual.
Primero crea un archivo context_processors.py
y luego definamos nuestro context processor get_current_year
:
# context_processors.py
import datetime
def get_current_year(request):
current_year = datetime.datetime.now().year
return {
"current_year": current_year
}
Lenguaje del código: Python (python)
Finalmente, debes agregar tu nuevo context processor en la configuración TEMPLATES
para que puedas fusionarlo con el contexto global. De esta forma, podrás acceder a los elementos en todas las plantillas.
# settings.py
TEMPLATES = [
{
# ...
"OPTIONS":
{
"context_processors":
[
"django.template.context_processors.debug",
"django.template.context_processors.request",
"django.contrib.auth.context_processors.auth",
"django.contrib.messages.context_processors.messages",
"myapp.context_processors.get_current_year",
],
},
},
]
Lenguaje del código: PHP (php)
Y listo, puedes usar la nueva variable current_year
desde cualquier plantilla de tu proyecto.
<h1>{{ current_year }}</h1>
Lenguaje del código: HTML, XML (xml)
Gracias por leer el artículo, para cualquier duda deja un comentario.
3 respuestas
Buen articulo, gracias
Hola José, gracias por leer 😄
hola, muy aclaratorio. Necesito en una vista usar esta variable para un query(insert). No logro verla, he tratado con current_year o request.current_year sin exito, me indica que no existe.