31 votes

Parfois, les messages Django sont répétés sur toutes les demandes (c'est-à-dire qu'ils ne sont pas effacés)

Très rarement, un Django message est affiché dans un HTML de réponse. Ensuite, l'utilisateur GETs une autre page, et le Django message est affiché de nouveau. Parfois, l'utilisateur GET une autre page par la suite, et le même message s'affiche de nouveau.

Cela arrive très rarement, mais lorsqu'il le fait, la plupart des utilisateurs de voir le même comportement que pour quelques instants. (C'est arrivé une fois dans un groupe de la croix-navigateur de test, et tout le monde dans la salle a vu le même comportement sur chacun de leurs ordinateurs pendant environ cinq minutes avant d'aller plus loin.)

Ce comportement s'est produit avec de nombreux points de vue différents; et, de plus, chaque point de vue, ajoute la même manière (voir ci-dessous).

J'ai été incapable de reproduire de manière fiable l'erreur, que ce soit dans notre environnement déployé (exécutant wsgi.py) ou lors de l'exécution du projet sur l'environnement local (exécutant manage.py). (Je note que je n'ai jamais vu ce problème sur place.)

Quelqu'un aurait-il une idée de quoi cela peut-il se passer?

Exemple d'un message de succès en cours d'ajout.

       messages.success(
            request,
            "Changes to {form} {request} were successfully saved."\
            .format(form=self.form.display_name,
                    request=serv_request_id_as_url(self.serv_request))
        )

C'est le modèle de code qui rend le message:

<div id="messages">
  {% for message in messages %}
    <div class="alert alert-{{ message.tags }}">
      <a class="close" data-dismiss="alert" href="#" title="Close"><span class="accessibility">Close this message.</span>&times;</a>
      <strong>{{ message.message|safe }}</strong>
    </div>
  {% endfor %}
</div>

Les paramètres pertinents:

MIDDLEWARE_CLASSES = (
    'django.middleware.gzip.GZipMiddleware',
    'django.middleware.common.CommonMiddleware',
    'outage.middleware.OutageMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.transaction.TransactionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'utdirect.middleware.HttpHeaderMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware', ... )

MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'

DATABASES = {'default': {'ENGINE': 'django.db.backends.oracle',
                         ...}}   

2voto

Wedava Points 163

Il semble que ce un problème causé par la mise en cache de Django. Voici le commentaire fait par un Django core developer:

"Je ne pense pas que Django peut gérer ce problème automatiquement et correctement. C'est un schéma très commun en boucle des messages dans le modèle de base d'un site web. Si on désactive la mise en cache tout simplement parce que les messages peuvent être affichés sur une page donnée, nous sommes juste de tuer le cache pour la plupart des sites web."

Le ticket est ici: https://code.djangoproject.com/ticket/13894

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X