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.
This commit is contained in:
		
							parent
							
								
									f742f86f4b
								
							
						
					
					
						commit
						5c7710954b
					
				
					 3 changed files with 30 additions and 6 deletions
				
			
		|  | @ -44,5 +44,5 @@ urlpatterns = patterns('', | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| 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)), | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | @ -3,6 +3,7 @@ from django.views.generic import ListView | ||||||
| from django.views.generic.dates import YearArchiveView, MonthArchiveView, DayArchiveView, DateDetailView | from django.views.generic.dates import YearArchiveView, MonthArchiveView, DayArchiveView, DateDetailView | ||||||
| from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger | from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger | ||||||
| from conservancy.apps.news.models import ExternalArticle | from conservancy.apps.news.models import ExternalArticle | ||||||
|  | from conservancy.apps.news.models import PressRelease | ||||||
| from conservancy.apps.events.models import Event | from conservancy.apps.events.models import Event | ||||||
| from datetime import datetime | from datetime import datetime | ||||||
| # for debugging... | # for debugging... | ||||||
|  | @ -17,6 +18,29 @@ class NewsListView(ListView): | ||||||
|         context.update(self.extra_context) |         context.update(self.extra_context) | ||||||
|         return 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): | def custom_index(request, queryset, *args, **kwargs): | ||||||
|     """News index.  Calls a generic list view, but passes additional |     """News index.  Calls a generic list view, but passes additional | ||||||
|     context including past and future events, and an index of news by |     context including past and future events, and an index of news by | ||||||
|  |  | ||||||
|  | @ -13,9 +13,9 @@ | ||||||
|          <h1><a href="/feeds/news/" class="feedlink"><img src="/img/feed-icon-14x14.png" alt="[RSS]"/></a> Conservancy News</h1> |          <h1><a href="/feeds/news/" class="feedlink"><img src="/img/feed-icon-14x14.png" alt="[RSS]"/></a> Conservancy News</h1> | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| {% ifnotequal page 1 %}<p>(page {{ page }} of {{ pages }})</p>{% endifnotequal %} | {% ifnotequal news.number 1 %}<p>(page {{ news.number }} of {{ news.paginator.num_pages }})</p>{% endifnotequal %} | ||||||
| 
 | 
 | ||||||
| {% for object in object_list %} | {% for object in news %} | ||||||
|     <div class="shaded"> |     <div class="shaded"> | ||||||
|     <p class="date">{{ object.pub_date|date:"F j, Y" }}</p> |     <p class="date">{{ object.pub_date|date:"F j, Y" }}</p> | ||||||
|     <h3><a href="{{ object.get_absolute_url }}">{{ object.headline|safe }}</a></h3> |     <h3><a href="{{ object.get_absolute_url }}">{{ object.headline|safe }}</a></h3> | ||||||
|  | @ -28,9 +28,9 @@ | ||||||
| {% endfor %} | {% endfor %} | ||||||
| 
 | 
 | ||||||
| <p> | <p> | ||||||
| {% if has_next %}<a class="next_page_button" href="?page={{ next }}">Next page (older) »</a>{% endif %} | {% if news.has_next %}<a class="next_page_button" href="?page={{ next }}">Next page (older) »</a>{% endif %} | ||||||
| {% if has_previous %}<a href="?page={{ previous }}">« Previous page (newer)</a>{% endif %} | {% if news.has_previous %}<a href="?page={{ previous }}">« Previous page (newer)</a>{% endif %} | ||||||
| {% comment %}{% for pagenum in page_navigation %}{% ifequal pagenum page %}[{{ pagenum }}]{% else %}<a href="?page={{ pagenum }}">{{ pagenum }}</a>{% endifequal %} {% endfor %}{% endcomment %} | {% comment %}{% for pagenum in news.paginator.page_range %}{% ifequal pagenum news.number %}[{{ pagenum }}]{% else %}<a href="?page={{ pagenum }}">{{ pagenum }}</a>{% endifequal %} {% endfor %}{% endcomment %} | ||||||
| </p> | </p> | ||||||
|          </div> |          </div> | ||||||
|  </div> |  </div> | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Bradley M. Kuhn
						Bradley M. Kuhn