You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ajax.py 1.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import six
  2. from django.contrib import messages
  3. class FlashMessages(object):
  4. """
  5. Intermediate container for flash messages.
  6. This is useful as, at the time of creating the message, we don't know
  7. whether the response is an AJAX response or not.
  8. """
  9. def __init__(self):
  10. self.msgs = {}
  11. def add_message(self, level, message):
  12. self.msgs.setdefault(level, []).append(message)
  13. def add_messages(self, level, messages):
  14. for msg in messages:
  15. self.add_message(level, msg)
  16. def info(self, message):
  17. self.add_message(messages.INFO, message)
  18. def warning(self, message):
  19. self.add_message(messages.WARNING, message)
  20. def error(self, message):
  21. self.add_message(messages.ERROR, message)
  22. def success(self, message):
  23. self.add_message(messages.SUCCESS, message)
  24. def as_dict(self):
  25. payload = {}
  26. for level, msgs in self.msgs.items():
  27. tag = messages.DEFAULT_TAGS.get(level, 'info')
  28. payload[tag] = [six.text_type(msg) for msg in msgs]
  29. return payload
  30. def apply_to_request(self, request):
  31. for level, msgs in self.msgs.items():
  32. for msg in msgs:
  33. messages.add_message(request, level, msg)