From 3a391c6d1b70552370de2d3b62c840f5f7908836 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20L=C3=A1zaro=20Gallego?= Date: Thu, 26 Nov 2015 11:17:12 +0100 Subject: [PATCH] Port all and unread views to classes --- notifications/urls.py | 7 ++++-- notifications/views.py | 52 +++++++++++++++++++----------------------- 2 files changed, 28 insertions(+), 31 deletions(-) diff --git a/notifications/urls.py b/notifications/urls.py index f2614de..f746139 100644 --- a/notifications/urls.py +++ b/notifications/urls.py @@ -2,9 +2,12 @@ from django.conf.urls import patterns, url +from . import views + + urlpatterns = patterns('notifications.views', - url(r'^$', 'all', name='all'), - url(r'^unread/$', 'unread', name='unread'), + url(r'^$', views.AllNotificationsList.as_view(), name='all'), + url(r'^unread/$', views.UnreadNotificationsList.as_view(), name='unread'), url(r'^mark-all-as-read/$', 'mark_all_as_read', name='mark_all_as_read'), url(r'^mark-as-read/(?P\d+)/$', 'mark_as_read', name='mark_as_read'), url(r'^mark-as-unread/(?P\d+)/$', 'mark_as_unread', name='mark_as_unread'), diff --git a/notifications/views.py b/notifications/views.py index fa2d740..cf062db 100644 --- a/notifications/views.py +++ b/notifications/views.py @@ -5,6 +5,7 @@ from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.forms import model_to_dict from django.shortcuts import get_object_or_404, render, redirect from django.template.context import RequestContext +from django.views.generic import ListView from .utils import slug2id from .models import Notification @@ -23,42 +24,35 @@ else: def JsonResponse(data): return HttpResponse(json.dumps(data, default=date_handler), content_type="application/json") -@login_required -def all(request): + +class NotificationViewList(ListView): + template_name = 'notifications/list.html' + context_object_name = 'notifications' + + @method_decorator(login_required) + def dispatch(self, request, *args, **kwargs): + return super(NotificationViewList, self).dispatch( + request, *args, **kwargs) + + +class AllNotificationsList(NotificationViewList): """ Index page for authenticated user """ - if getattr(settings, 'NOTIFICATIONS_SOFT_DELETE', False): - qs = request.user.notifications.active() - else: - qs = request.user.notifications.all() - return render(request, 'notifications/list.html', { - 'notifications': qs - }) - actions = request.user.notifications.all() - paginator = Paginator(actions, 16) # Show 16 notifications per page - page = request.GET.get('p') + def get_queryset(self): + if getattr(settings, 'NOTIFICATIONS_SOFT_DELETE', False): + qs = self.request.user.notifications.active() + else: + qs = self.request.user.notifications.all() + return qs - try: - action_list = paginator.page(page) - except PageNotAnInteger: - # If page is not an integer, deliver first page. - action_list = paginator.page(1) - except EmptyPage: - # If page is out of range (e.g. 9999), deliver last page of results. - action_list = paginator.page(paginator.num_pages) - return render_to_response('notifications/list.html', { - 'member': request.user, - 'action_list': action_list, - }, context_instance=RequestContext(request)) +class UnreadNotificationsList(NotificationViewList): + + def get_queryset(self): + return self.request.user.notifications.unread() -@login_required -def unread(request): - return render(request, 'notifications/list.html', { - 'notifications': request.user.notifications.unread() - }) @login_required def mark_all_as_read(request):