Si configuro una variable de sesión en Django, como:
request.session["name"] = "name"
¿Hay alguna forma de acceder a ella desde una plantilla o tengo que recuperarla desde una vista y luego pasarla a una plantilla?
Preguntar porque tengo alrededor de 10 pequeñas variables de sesión a las que me gustaría acceder dentro de una plantilla, y pasar las 10 de la vista a la plantilla podría ser un poco complicado.
(Tengo que usar variables de sesión porque es un HttpResponseRedirect, pero almacenar las variables en una base de datos es excesivo para mis propósitos).
Entonces, ¿alguna forma de tomar variables de sesión directamente dentro de una plantilla?
HttpResponse
clase no trata con plantillas en absoluto, por lo que la pregunta no parece relevante ...request.session
es un diccionario como cualquier otro, por lo que solo usa el mecanismo de plantilla normal para atributos y miembros:No olvide pasar la solicitud al contexto de la plantilla, o incluso mejor asegurarse de que está utilizando RequestContext y tener habilitado el procesador de contexto de solicitud. Ver la documentación .
fuente
Estoy usando Django 1.9 (marzo de 2016) y para ponerme
{{ request.session.name}}
a trabajar, mi configuración tiene esto:La diferencia con las respuestas anteriores es: se
'django.core.context_processors.request'
convirtió'django.template.context_processors.request'
fuente
django.template.context_processors.request
ya estaba en el archivo de configuración: DPuede pasar una
request
variable a una plantilla y usar:fuente
Primero imprimir
request.session.keys()
luegoObtendrá estas dos variables de sesión.
fuente
la implementación más simple es usar el bucle if:
fuente
En tu settins.py
Tu punto de vista, quizás se vea así.
fuente
Respuesta continua de @Ludwik Trammer, Cómo agregar TEMPLATE_CONTEXT_PROCESSORS
Para django 1.6, en settings.py agregue TEMPLATE_CONTEXT_PROCESSORS haciendo referencia al código siguiente y luego utilícelo
{{ request.session.name }}
en los archivos de plantilla.Referencia https://docs.djangoproject.com/en/1.6/ref/settings/#std:setting-TEMPLATE_CONTEXT_PROCESSORS
Tenga en cuenta que, debe usar ese código completo en la configuración. Si se usa
"django.core.context_processors.request"
solo, se anulará la configuración predeterminada.fuente
Tal vez un poco tarde ahora. Si se establece directamente
TEMPLATE_CONTEXT_PROCESSORS
ensettings.py
, perderá toda predeterminadoTEMPLATE_CONTEXT_PROCESSORS
valor. Esto es lo que hago en misettings.py
:fuente