Question

Je montre souvent des messages sur les actions des utilisateurs à utilisateurs connectés à mon point de vue d'applications Django en utilisant:

request.user.message_set.create("message to user")

Comment pourrais-je faire la même chose pour les utilisateurs anonymes (non connecté)? Il n'y a pas request.user pour les utilisateurs anonymes, mais la documentation Django dit que l'utilisation du middleware « session » vous pouvez faire la même chose que le code ci-dessus. La documentation de Django qui relie au middleware de la session affirme qu'il est possible, mais je ne pouvais pas trouver comment le faire de la documentation de la session.

Était-ce utile?

La solution

Voir http://code.google.com/p/django-session : messages / jusqu'à ce que le patch qui permet terres des messages en fonction de session dans l'arbre Django (comme je l'ai vu récemment, il est marqué pour 1.2, donc pas d'espoir pour plus rapide ...).

Un autre projet avec des fonctionnalités similaires est Django flash ( http://djangoflash.destaquenet.com/ ) .

Autres conseils

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 tout ce qu'il retourne sera ajouté au contexte du modèle. Avec cela en place, si je veux donner à un utilisateur un message, je peux faire ceci:

def my_view(request):
    if someCondition:
        request.session['message'] = 'Some Error Message'

Enfin, dans un modèle que vous pouvez vérifier simplement 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 que ce soit la configuration que vous ne pouvez ajouter 1 message à la fois pour un utilisateur, mais qui est tout ce que je jamais vraiment besoin si ça marche pour moi. Il pourrait facilement être modifié pour permettre de multiples messages et autres.

Stocker les données directement dans la session, ce qui est un objet comme dict. Puis dans la vue / modèle, vérifiez la valeur.

Plus d'informations ici:

http: // docs. djangoproject.com/en/dev/topics/http/sessions/#using-sessions-in-views

Vous pouvez également créer une classe de middleware pour vérifier l'objet de la session sur chaque demande, et faites votre accumulation / déchirer là-bas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top