2012-04-13 3 views
1

J'utilise le module django.contrib.messages pour créer des messages de vidage. Ces messages peuvent être présentés dans différents blocs sur la page, dépend de balise supplémentaire:Méthode de remplacement de module sur le démarrage Django

messages.error(request, 'Error message', extra_tags='form') 

Je balise par défaut nommé « global » et je dois l'ajouter dans un nouveau message si aucun extra_tags défini. Alors, je l'ai écrit middleware pour envelopper méthode django.contrib.messages.add_message() au démarrage de l'application:

class Initialization: 
    def __init__(self): 
     self.init_messages() 
     raise MiddlewareNotUsed 

    def init_messages(self): 
     add_message_method = messages.add_message 
     def add_message_wrapper(request, level, message, extra_tags='', fail_silently=False): 
      if not extra_tags: 
       extra_tags = 'global' 
      add_message_method(request, level, message, extra_tags, fail_silently) 
     messages.add_message = add_message_wrapper 

Je vois cette méthode init_messages() est appelée, mais quand je l'appelle django.contrib.messages.add_message(), il est pas entouré de add_message_wrapper().

Où est mon échec?

+0

Avez-vous appelé 'messages.add_message()' 'ou messages.error() '. – okm

Répondre

1

Vous ne pourriez pas simplement ajouter le "code de démarrage" dans settings.py ou dans views.py à la place?

Si tout ce que vous faites est d'ajouter une valeur par défaut "global" chaque fois extra_tags est vide, vous pouvez aussi le faire que dans le modèle de page tout en rendant vos messages:

{% if not message_obj.tags %} 
    // Use "global" 
{% else %} 
    // Use {{message_obj.tags}} 
{% endif %} 

Cela peut aussi être fait à l'intérieur de votre code de la vue :

storage = messages.get_messages(request) 
for message in storage: 
    if not message.tags: 
     message.tags = "global" 
storage.used = False 

Voir la documentation de Django pour plus d'informations https://docs.djangoproject.com/en/dev/ref/contrib/messages/#expiration-of-messages

+0

J'aime le deuxième cas, merci! – Marboni

+0

Vous êtes les bienvenus :) – cfedermann

Questions connexes