C'est ce que je fais, en utilisant les processeurs de contexte:
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 à la 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 quoi que ce soit rns sera ajouté au contexte du template. Avec cela en place, si je veux donner à un utilisateur un message, je peux le faire:
def my_view(request):
if someCondition:
request.session['message'] = 'Some Error Message'
Enfin, dans un modèle que 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 simplement utilisé pour le style en fonction de ce qu'il est ("erreur", "avis", "succès") et la façon dont cela est configuré vous pouvez seulement ajouter un message à la fois pour un utilisateur, mais c'est tout J'ai vraiment besoin de ça alors ça marche pour moi. Il pourrait être facilement modifié pour permettre plusieurs messages et autres.
Malheureusement, django_session_messages ne fonctionnera pas avec django.core.context_processors.auth qui supprime tous les messages utilisateur avant l'exécution du code dans ce patch. Probablement, on pourrait envisager de refaire tout le système de messagerie dans django. – Evgeny
si vous inversez l'ordre des deux processeurs de contexte dans les paramètres, le second écrasera la liste des messages, donc cela ne vous aidera pas non plus. – Evgeny