pagination fixed

remotes/origin/1203
Ivan Kovalkovskyi 11 years ago
parent 112dcbb877
commit fc9d882f98
  1. 37
      functions/custom_views.py

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.shortcuts import render_to_response from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect, HttpResponse from django.http import HttpResponseRedirect, HttpResponse, Http404
from django.core.context_processors import csrf from django.core.context_processors import csrf
from django.conf import settings from django.conf import settings
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
@ -20,8 +20,11 @@ import random
from django.views.generic import ListView as OldListView from django.views.generic import ListView as OldListView
class ListView(OldListView): class ListView(OldListView):
""" """
Default Django generic ListView with few overrided methods for redirecting
onto first page of pagination in case of entering big page number(for search engines)
List of modules, where overrided ListView is used: List of modules, where overrided ListView is used:
- accounts.views - accounts.views
- article.views - article.views
@ -34,7 +37,37 @@ class ListView(OldListView):
- specialist_catalog.views - specialist_catalog.views
- translator.views - translator.views
""" """
paginator_class = settings.DEFAULT_PAGINATOR def paginate_queryset(self, queryset, page_size):
"""
Paginate the queryset, if needed.
"""
paginator = self.get_paginator(queryset, page_size, allow_empty_first_page=self.get_allow_empty())
page_kwarg = self.page_kwarg
page = self.kwargs.get(page_kwarg) or self.request.GET.get(page_kwarg) or 1
try:
page_number = int(page)
except ValueError:
if page == 'last':
page_number = paginator.num_pages
else:
raise Http404(_("Page is not 'last', nor can it be converted to an int."))
try:
page = paginator.page(page_number)
self.kwargs['home'] = False
except EmptyPage as e:
page = paginator.page(1)
self.kwargs['home'] = True
return (paginator, page, page.object_list, page.has_other_pages())
def get(self, request, *args, **kwargs):
response = super(ListView, self).get(request, *args, **kwargs)
if self.kwargs.get("home"):
path = self.request.path
return HttpResponseRedirect(path[:path.find('page')])
else:
return response
@login_required @login_required
def filtered_list(request, objects, template, item_per_page=settings.ADMIN_PAGINATION): def filtered_list(request, objects, template, item_per_page=settings.ADMIN_PAGINATION):

Loading…
Cancel
Save