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.3KB

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