|
|
|
@ -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): |
|
|
|
|