J'affiche des messages utilisateur à l'aide de modèles utilisant RequestContext dans Django, qui permet d'accéder aux messages des utilisateurs via la variable template {{messages}}, ce qui est pratique.Gestion non destructive des messages utilisateur Django
J'aimerais l'utilisateur lui-même supprimer les messages - est-il un moyen de le faire dans Django sans réécrire beaucoup de code? Malheureusement Django supprime automatiquement les messages à chaque requête - pas très utile dans ce cas.
Django doc dit:
"Note that RequestContext calls get_and_delete_messages() behind the scenes"
serait parfait s'il y avait un moyen de simplement désactiver la suppression automatique des messages!
REMARQUE: Malheureusement solution ci-dessous fait interface d'administration inutilisable. Je ne sais pas comment contourner cela, vraiment ennuyeux.
EDIT - a trouvé une solution - utilise un processeur de contexte d'authentification personnalisé qui appelle user.message_set.all() comme suggéré par Alex Martelli. Il n'est pas nécessaire de changer le code d'application du tout avec cette solution. (Processeur de contexte est un composant dans django qui injecte des variables dans les modèles.)
créer le fichier myapp/context_processors.py
et remplacer dans settings.py dans TEMPLATE_CONTEXT_PROCESSORS
tuple django.core.context_processors.auth
avec myapp.context_processors.auth_processor
mis dans myapp/context_processors.py:
def auth_processor(request):
"""
this function is mostly copy-pasted from django.core.context_processors.auth
it does everything the same way except keeps the messages
"""
messages = None
if hasattr(request, 'user'):
user = request.user
if user.is_authenticated():
messages = user.message_set.all()
else:
from django.contrib.auth.models import AnonymousUser
user = AnonymousUser()
from django.core.context_processors import PermWrapper
return {
'user': user,
'messages': messages,
'perms': PermWrapper(user),
}
Y at-il une raison pour laquelle vous le feriez vouloir conserver le jeu de messages. Il est destiné à afficher le message à l'utilisateur; et une fois cela fait, il sera supprimé. –
@becomingGuru Je veux que l'utilisateur sache reconnaître les messages importants. on leur dit qu'ils doivent valider le courrier électronique avant que leur contribution puisse être publiée. Ils peuvent toujours cliquer sur la petite boîte croisée pour fermer définitivement le message. – Evgeny