diff --git a/README.md b/README.md index 4dbb64b..955f2b9 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ This document assumes that you are familiar with Python and Django. TEMPLATE_DIRS = ( ... - 'path/to/persistent_messages/templates') + 'path/to/persistent_messages/templates' ) diff --git a/persistent_messages/storage.py b/persistent_messages/storage.py index 67caf91..124b759 100644 --- a/persistent_messages/storage.py +++ b/persistent_messages/storage.py @@ -6,6 +6,7 @@ from django.contrib.messages.storage.fallback import FallbackStorage from django.db.models import Q import datetime +import itertools def get_user(request): if hasattr(request, 'user') and request.user.__class__ != AnonymousUser: @@ -77,6 +78,12 @@ def __iter__(self): messages.extend(self._queued_messages) return iter(messages) + def __getitem__(self, index): + try: + return next(itertools.islice(self.__iter__(), index, index + 1)) + except TypeError: + return list(itertools.islice(self.__iter__(), index.start, index.stop, index.step)) + def _prepare_messages(self, messages): if not get_user(self.request).is_authenticated(): return super(PersistentMessageStorage, self)._prepare_messages(messages) diff --git a/persistent_messages/views.py b/persistent_messages/views.py index c66e0d7..9990efb 100644 --- a/persistent_messages/views.py +++ b/persistent_messages/views.py @@ -23,7 +23,8 @@ def message_mark_read(request, message_id): message.read = True message.save() if not request.is_ajax(): - return HttpResponseRedirect(request.META.get('HTTP_REFERER') or '/') + return HttpResponseRedirect( + request.REQUEST.get("next", request.META.get('HTTP_REFERER')) or '/') else: return HttpResponse('') @@ -33,6 +34,7 @@ def message_mark_all_read(request): raise PermissionDenied Message.objects.filter(user=user).update(read=True) if not request.is_ajax(): - return HttpResponseRedirect(request.META.get('HTTP_REFERER') or '/') + return HttpResponseRedirect( + request.REQUEST.get("next", request.META.get('HTTP_REFERER')) or '/') else: return HttpResponse('')