2012-04-13 8 views
1

Я использую модуль django.contrib.messages для создания сообщений флеша. Эти сообщения могут быть представлены в различных блоках на странице, зависит от дополнительного тега:Метод переопределения модуля при запуске Django

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

У меня есть тег по умолчанию с именем «глобальной», и мне нужно, чтобы добавить его в новом сообщении, если нет extra_tags не установлено. Так что я написал промежуточное программное обеспечение, чтобы обернуть django.contrib.messages.add_message() метод при запуске приложения:

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 

Я вижу, что init_messages() метод вызывается, но когда я называю django.contrib.messages.add_message(), не обернуты add_message_wrapper().

Где мой отказ?

+0

ли вы назвать 'messages.add_message()' или 'messages.error() '. – okm

ответ

1

Не могли бы вы просто добавить «код запуска» в settings.py или в views.py вместо этого?

Если все, что вы делаете, добавляя значение по умолчанию "global" всякий раз, когда extra_tags пуст, вы также можете сделать это в шаблоне страницы при рендеринге ваши сообщения:

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

Это также может быть сделано внутри вида кода :

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

Смотрите документацию Django для получения дополнительной информации https://docs.djangoproject.com/en/dev/ref/contrib/messages/#expiration-of-messages

+0

Мне нравится второй случай, спасибо! – Marboni

+0

Добро пожаловать :) – cfedermann

 Смежные вопросы

  • Нет связанных вопросов^_^