He llegado a un punto en el que necesito pasar ciertas variables a todas mis vistas (principalmente variables de tipo de autenticación personalizadas).
Me dijeron que escribir mi propio procesador de contexto era la mejor manera de hacer esto, pero estoy teniendo algunos problemas.
Mi archivo de configuración se ve así
TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.contrib.messages.context_processors.messages",
"sandbox.context_processors.say_hello",
)
Como puede ver, tengo un módulo llamado 'context_processors' y una función dentro de ese llamado 'say_hello'.
Que parece
def say_hello(request):
return {
'say_hello':"Hello",
}
¿Tengo razón al asumir que ahora puedo hacer lo siguiente dentro de mis puntos de vista?
{{ say_hello }}
En este momento, esto se traduce en nada en mi plantilla.
Mi vista parece
from django.shortcuts import render_to_response
def test(request):
return render_to_response("test.html")
fuente

RequestContext). Piense en el procesador de contexto que hizo. Tomarequestcomo argumento. Eso significa que de alguna manera necesita dar la solicitud actual a la lógica de renderizado.RequestContextbásicamente, solo maneja la lógica simple de recorrer todos los procesadores de contexto y pasarles la solicitud actual, luego actualizar el contexto de la página con los resultados.return render_to_response('template.html', context_instance=RequestContext(request))es viejo fasion, creo quereturn render(request,'template.html')es más secoDe acuerdo con los documentos de django , puede usarlo
rendercomo un atajo en lugar de render_to_response con el argumento context_instance:fuente
Desde Django 1.8, registra sus procesadores de contexto personalizados de esta manera:
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [ 'templates' ], 'APP_DIRS': True, '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', 'www.context_processors.instance', ], }, }, ]asumiendo que su procesador de contexto está en la aplicación
wwwencontext_processors.pyfuente
Si está utilizando el
render_to_response()acceso directo de Django para completar una plantilla con el contenido de un diccionario, a su plantilla se le pasará una instancia de contexto por defecto (no aRequestContext). Para usar unRequestContexten la representación de su plantilla, use elrender()atajo que es el mismo que una llamada arender_to_response()con uncontext_instanceargumento que fuerza el uso de unRequestContext.fuente