Пример #1
0
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()
Пример #2
0
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 
Пример #3
0
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)
Пример #4
0
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