template - render django
creando mi propio procesador de contexto en django (4)
De acuerdo con los documentos de django , puede usar render
como acceso directo en lugar de render_to_response con el argumento context_instance:
Alternativamente, use el acceso directo de
render()
que es lo mismo que una llamada a render_to_response () con un argumento de instancia de contexto que obliga al uso de un RequestContext.
He llegado a un punto en el que necesito pasar ciertas variables a todas mis vistas (en su mayoría variables de tipo de autenticación personalizada).
Me dijeron que escribir mi propio procesador de contexto era la mejor manera de hacerlo, pero tengo 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 ''procesadores_contexto'' y una función dentro de eso llamado ''say_hello''.
Que parece
def say_hello(request):
return {
''say_hello'':"Hello",
}
¿Tengo razón al suponer que ahora puedo hacer lo siguiente dentro de mis puntos de vista?
{{ say_hello }}
En este momento, esto se convierte en nada en mi plantilla.
Mi vista se ve como
from django.shortcuts import render_to_response
def test(request):
return render_to_response("test.html")
Desde Django 1.8 registras tus procesadores de contexto personalizados como este:
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 www
en context_processors.py
El procesador de contexto que ha escrito debería funcionar. El problema está en su opinión.
¿Está seguro de que su vista se está representando con RequestContext
?
Por ejemplo:
def test_view(request):
return render_to_response(''template.html'')
La vista anterior no utilizará los procesadores de contexto enumerados en TEMPLATE_CONTEXT_PROCESSORS
. Asegúrese de que está proporcionando un RequestContext
así:
def test_view(request):
return render_to_response(''template.html'', context_instance=RequestContext(request))
Si está utilizando el render_to_response()
abreviado render_to_response()
Django para render_to_response()
una plantilla con el contenido de un diccionario, su plantilla pasará una instancia de Contexto de manera predeterminada (no un RequestContext
). Para usar un RequestContext
en la representación de su plantilla, use el acceso directo render()
que es lo mismo que una llamada a render_to_response()
con un argumento context_instance
que obliga al uso de un RequestContext
.