C'est ce que je fais, en utilisant des processeurs contextuels :
project/application/context.py
(vérifier les messages et les ajouter au contexte) :
def messages(request):
messages = {}
if 'message' in request.session:
message_type = request.session.get('message_type', 'error')
messages = {'message': request.session['message'],
'message_type': message_type}
del request.session['message']
if 'message_type' in request.session:
del request.session['message_type']
return messages
project/settings.py
(ajouter le contexte au TEMPLATE_CONTEXT_PROCESSORS
):
TEMPLATE_CONTEXT_PROCESSORS = (
"django.core.context_processors.request",
"django.core.context_processors.debug",
"django.core.context_processors.media",
"django.core.context_processors.auth",
"project.application.context.messages",
)
Avec ce qui précède, la fonction messages
sera appelée à chaque demande et ce qu'elle renvoie sera ajouté au contexte du modèle. Ainsi, si je souhaite envoyer un message à un utilisateur, je peux procéder de la manière suivante :
def my_view(request):
if someCondition:
request.session['message'] = 'Some Error Message'
Enfin, dans un modèle, vous pouvez simplement vérifier s'il y a des erreurs à afficher :
{% if message %}
<div id="system_message" class="{{ message_type }}">
{{ message }}
</div>
{% endif %}
Le type de message est juste utilisé pour le style en fonction de ce qu'il est ("erreur", "avis", "succès") et de la façon dont il est configuré, vous ne pouvez ajouter qu'un seul message à la fois pour un utilisateur, mais c'est tout ce dont j'ai vraiment besoin, donc cela fonctionne pour moi. Il pourrait être facilement modifié pour permettre l'ajout de plusieurs messages et ainsi de suite.