Si je définis une variable de session dans Django, comme:
request.session["name"] = "name"
Existe-t-il un moyen d'y accéder à partir d'un modèle, ou dois-je le récupérer à partir d'une vue, puis le transmettre à un modèle?
Demander parce que j'ai environ 10 petites variables de session auxquelles je voudrais accéder dans un modèle, et passer les 10 de la vue au modèle pourrait devenir un peu compliqué.
(Je dois utiliser des variables de session car c'est un HttpResponseRedirect, mais stocker les variables dans une base de données est excessif pour mes besoins.)
Alors - quel moyen de récupérer les variables de session directement dans un modèle?
HttpResponse
classe ne traite pas du tout de modèles, donc la question ne semble pas pertinente ...request.session
est un dictionnaire comme les autres, vous utilisez donc simplement le mécanisme de modèle normal pour les attributs et les membres:N'oubliez pas de transmettre la demande dans le contexte du modèle, ou mieux encore, assurez-vous que vous utilisez RequestContext et que le processeur de contexte de demande est activé. Consultez la documentation .
la source
J'utilise Django 1.9 (mars 2016) et pour me mettre
{{ request.session.name}}
au travail, mes paramètres ont ceci:La différence avec les réponses précédentes est: est
'django.core.context_processors.request'
devenu'django.template.context_processors.request'
la source
django.template.context_processors.request
était déjà dans le fichier de réglage: DVous pouvez passer une
request
variable à un modèle et y utiliser:la source
Première impression
request.session.keys()
ensuiteVous obtiendrez ces deux variables de session.
la source
l'implémentation la plus simple utilise la boucle if:
la source
Dans votre settins.py
Votre point de vue ressemble peut-être à ceci.
la source
Poursuivre la réponse @Ludwik Trammer, Comment ajouter TEMPLATE_CONTEXT_PROCESSORS
Pour django 1.6, dans settings.py ajoutez TEMPLATE_CONTEXT_PROCESSORS en vous référant au code ci-dessous, puis utilisez-les
{{ request.session.name }}
dans les fichiers modèles.Référence https://docs.djangoproject.com/en/1.6/ref/settings/#std:setting-TEMPLATE_CONTEXT_PROCESSORS
Veuillez noter que vous devez utiliser ce code complet dans les paramètres. L'utilisation
"django.core.context_processors.request"
seule entraînera le remplacement des paramètres par défaut.la source
Peut-être un peu trop tard maintenant. Si vous directement défini
TEMPLATE_CONTEXT_PROCESSORS
danssettings.py
, vous perdrez tout défaut deTEMPLATE_CONTEXT_PROCESSORS
valeur. Voici ce que je fais dans monsettings.py
:la source