def paginate( request, klass, per_page=4, page_number=1, ): query = request.GET page_number = query.get('page_number', page_number) per_page = query.get('per_page', per_page) try: objects = klass.objects.all() page = Paginator(objects, per_page=per_page).get_page(page_number) except: objects = klass page = Paginator(objects, per_page=per_page).get_page(page_number) is_paginated = page.has_other_pages() current_page = page.number last_page = page.paginator.num_pages has_prev = page.has_previous() has_next = page.has_next() next_page = page.next_page_number() if has_next else '' prev_page = page.previous_page_number() if has_prev else '' pages_list = page.paginator.page_range pages_list = list(pages_list) return locals()
def paginate(posts, query): page_number = query.get('page_number') # per_page = query.get('per_page', CatalogueConfig.get_solo().posts_per_page) per_page = query.get('per_page', 8) page = Paginator(posts, per_page=per_page).get_page(page_number) page_posts = PostSerializer(page, many=True, read_only=True).data is_paginated = page.has_other_pages() current_page = page.number last_page = page.paginator.num_pages pages_list = page.paginator.page_range has_prev = page.has_previous() has_next = page.has_next() next_page = page.next_page_number() if has_next else '' prev_page = page.previous_page_number() if has_prev else '' response = { 'page_posts': page_posts, 'is_paginated': is_paginated, 'current_page': current_page, 'last_page': last_page, 'pages_list': list(pages_list), 'has_prev': has_prev, 'has_next': has_next, 'next_page': next_page, 'prev_page': prev_page, } return response
def get_form(request): search_query = request.GET.get('search', '') if search_query: posts = Post.objects.filter( Q(title__icontains=search_query) | Q(body__icontains=search_query)) else: posts = Post.objects.all() page = Paginator(posts, 2).get_page(request.GET.get('page', 1)) is_paginated = page.has_other_pages() prev_page_num = '?page={}'.format( page.previous_page_number()) if page.has_previous() else '' next_page_num = '?page={}'.format( page.next_page_number()) if page.has_next() else '' context = { 'page': page, 'is_paginated': is_paginated, 'next_page': next_page_num, 'prev_page': prev_page_num } return render(request, 'blog/index.html', context=context)
def paginate(items, query): response = {} page_number = query.get('page', 1) per_page = query.get('per_page', CatalogueConfig.get_solo().items_per_page) ordering = query.get('sort', '-created') if not item_settings.PAGINATE_AJAX: page = items else: page = Paginator(items, per_page=per_page).get_page(page_number) is_paginated = page.has_other_pages() current_page = page.number last_page = page.paginator.num_pages page_range = page.paginator.page_range has_prev = page.has_previous() has_next = page.has_next() next_url = f'?page={page.next_page_number()}' if has_next else '' prev_url = f'?page={page.previous_page_number()}' if has_prev else '' first_url = f'?page=1' last_url = f'?page={last_page}' response.update({ 'is_paginated': is_paginated, 'current_page': current_page, 'page_range': list(page_range), 'last_page': last_page, 'first_url': first_url, 'next_url': next_url, 'prev_url': prev_url, 'last_url': last_url, 'has_prev': has_prev, 'has_next': has_next, }) page_items = ItemDetailSerializer(page, many=True, read_only=True).data response = { 'paginated_items': page_items, } return response