From 5c7710954b2e0e914e0cf19f5a9476a923b472cb 2015-03-04 20:08:39 From: Bradley M. Kuhn Date: 2015-03-04 20:08:39 Subject: [PATCH] Attempt to use Django 1.7 Paginator object. Upon reading https://docs.djangoproject.com/en/1.7/topics/pagination/#using-paginator-in-a-view I wonder if we should simply follow this model for pagination of news items. I've attempted to adapt that herein. This is a first attempt and likely will have issues. --- diff --git a/www/conservancy/apps/news/urls.py b/www/conservancy/apps/news/urls.py index 55a6f3f01609323e47b79b9d59e5931dbce90254..cb48e89e08138910ae99e4a795b81796cbaccf8b 100644 --- a/www/conservancy/apps/news/urls.py +++ b/www/conservancy/apps/news/urls.py @@ -44,5 +44,5 @@ urlpatterns = patterns('', ) urlpatterns += patterns('', - (r'^/?$', 'conservancy.apps.news.views.custom_index', dict(info_dict, paginate_by=6)), + (r'^/?$', 'conservancy.apps.news.views.listing', dict(info_dict, paginate_by=6)), ) diff --git a/www/conservancy/apps/news/views.py b/www/conservancy/apps/news/views.py index dec05a1d0cbbd16f779dba94eca176ab2bcc25a3..0944f86268d82eecf83a5ff3dc1db0ca7d5d2b93 100644 --- a/www/conservancy/apps/news/views.py +++ b/www/conservancy/apps/news/views.py @@ -3,6 +3,7 @@ from django.views.generic import ListView from django.views.generic.dates import YearArchiveView, MonthArchiveView, DayArchiveView, DateDetailView from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from conservancy.apps.news.models import ExternalArticle +from conservancy.apps.news.models import PressRelease from conservancy.apps.events.models import Event from datetime import datetime # for debugging... @@ -17,6 +18,29 @@ class NewsListView(ListView): context.update(self.extra_context) return context +def listing(request): + news = PressRelease.objects.all() + +# if (not kwargs.has_key('allow_future')) or not kwargs['allow_future']: + news = news.filter(**{'%s__lte' % kwargs['date_field']: + datetime.now()}) + + date_list = news.dates(kwargs['date_field'], 'year') + + paginator = Paginator(news, 6) # Show 6 news items per page + + page = request.GET.get('page') + try: + contacts = paginator.page(page) + except PageNotAnInteger: + # If page is not an integer, deliver first page. + contacts = paginator.page(1) + except EmptyPage: + # If page is out of range (e.g. 9999), deliver last page of results. + contacts = paginator.page(paginator.num_pages) + + return render_to_response('pressrelease_list.html', {"news": news, "date_list" : date_list}) + def custom_index(request, queryset, *args, **kwargs): """News index. Calls a generic list view, but passes additional context including past and future events, and an index of news by diff --git a/www/conservancy/templates/news/pressrelease_list.html b/www/conservancy/templates/news/pressrelease_list.html index 350d1385517a578ea4e824432dc7b24ff15d6524..b0650b8d88c1efd82dda4fa6e3831ac4ad97d95f 100644 --- a/www/conservancy/templates/news/pressrelease_list.html +++ b/www/conservancy/templates/news/pressrelease_list.html @@ -13,9 +13,9 @@

[RSS] Conservancy News

-{% ifnotequal page 1 %}

(page {{ page }} of {{ pages }})

{% endifnotequal %} +{% ifnotequal news.number 1 %}

(page {{ news.number }} of {{ news.paginator.num_pages }})

{% endifnotequal %} -{% for object in object_list %} +{% for object in news %}

{{ object.pub_date|date:"F j, Y" }}

{{ object.headline|safe }}

@@ -28,9 +28,9 @@ {% endfor %}

-{% if has_next %}Next page (older) »{% endif %} -{% if has_previous %}« Previous page (newer){% endif %} -{% comment %}{% for pagenum in page_navigation %}{% ifequal pagenum page %}[{{ pagenum }}]{% else %}{{ pagenum }}{% endifequal %} {% endfor %}{% endcomment %} +{% if news.has_next %}Next page (older) »{% endif %} +{% if news.has_previous %}« Previous page (newer){% endif %} +{% comment %}{% for pagenum in news.paginator.page_range %}{% ifequal pagenum news.number %}[{{ pagenum }}]{% else %}{{ pagenum }}{% endifequal %} {% endfor %}{% endcomment %}