2012-04-13 8 views
1

Ich benutze Modul zum Erstellen von Flush-Nachrichten. Diese Nachrichten können in verschiedenen Blöcken auf der Seite angezeigt werden, hängt davon ab, zusätzlichen tag:Überschreiben Modul-Methode auf Django Start

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

I Standard-Tag mit dem Namen ‚global‘ und ich brauche es in neuer Nachricht hinzufügen, wenn keine extra_tags gesetzt. Also schrieb ich Middleware django.contrib.messages.add_message() Verfahren beim Programmstart zu wickeln:

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 

Ich sehe, dass init_messages() Methode aufgerufen wird, aber wenn ich django.contrib.messages.add_message() nenne, ist es nicht mit add_message_wrapper() gewickelt.

Wo ist mein Fehler?

+0

Haben Sie rufen 'messages.add_message()' oder 'messages.error:() '. – okm

Antwort

1

Könnten Sie nicht einfach den "Startup-Code" in oder in views.py stattdessen hinzufügen?

Wenn alles, was Sie tun, ist das Hinzufügen eines Standardwertes "global", wenn extra_tags leer ist, können Sie auch tun, dass in der Seitenvorlage, während der Nachrichten-Rendering:

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

Dies kann auch in Ihrem View-Code erfolgen Siehe

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

die Django-Dokumentation für weitere Informationen https://docs.djangoproject.com/en/dev/ref/contrib/messages/#expiration-of-messages

+0

Ich mag zweiten Fall, danke! – Marboni

+0

Gern geschehen :) – cfedermann