Как реализовать разбиение на страницы в результатах поиска в django?

Я нашел ресурс, где у него есть такой код:

from django.contrib.auth.models import User
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

def index(request):
    user_list = User.objects.all()
    page = request.GET.get('page', 1)

    paginator = Paginator(user_list, 10)
    try:
        users = paginator.page(page)
    except PageNotAnInteger:
        users = paginator.page(1)
    except EmptyPage:
        users = paginator.page(paginator.num_pages)

    return render(request, 'core/user_list.html', { 'users': users })

У меня есть такой код:

def product_list(request, category_slug=None):

    category = None
    categories = Category.objects.all().order_by("-rating")
    #paginator = Paginator(categories, 10)
    products = Product.objects.all().order_by("-number")
    users = User.objects.exclude(id=request.user.id)
    query = request.GET.get('q')
    if query=='':
        return HttpResponseRedirect('/')
    if query:
        categories = Category.objects.filter(Q(slug__icontains=query)| Q(url__icontains=query)).order_by("-rating") 
        products = Product.objects.filter(Q(slug__icontains=query) | Q(name__icontains=query) | Q(description__icontains=query)).order_by("number")
    if category_slug:
        category = get_object_or_404(Category, slug=category_slug)
        products = Product.objects.filter(category=category)

    categories_counter = products.annotate(Count('id'))
    categories_count = len(categories_counter)
    #contacts = paginator.get_page(query)

    context = {
        'category': category,
        'categories': categories,
        'products': products,
        'categories_count':categories_count,
        'query':query,
        'users':users,
        #'contacts':contacts,
    }
    return render(request, 'shop/product/list.html', context)

Я получил объекты из двух моделей, категории и продукта. Как реализовать код разбиения на страницы в этом представлении? Это не обычная нумерация страниц, а нумерация страниц в результатах поиска.


person Uchiha AJ    schedule 27.08.2018    source источник


Ответы (1)


user_list = User.objects.all() # this is the full queryset, contains all objects
page = request.GET.get('page', 1) # this is the page number of page whose data you want to retrieve, you need to pass page value as query params

paginator = Paginator(user_list, 10) # this will paginate the full queryset in pages of 10 objects
try:
    users = paginator.page(page) # this will return data of that particular page
except PageNotAnInteger:
    users = paginator.page(1) # if the passed page is not Integer then first page is returned, you can customize this
except EmptyPage:
    users = paginator.page(paginator.num_pages) # if that page contains no element, then last page is returned, you can customize this also

Вы можете применить ту же логику для получения категорий в category_page и других данных.

person Umair Mohammad    schedule 27.08.2018