【问题标题】:How to implement pagination in Search results in django?如何在 django 的搜索结果中实现分页?
【发布时间】:2018-08-27 14:05:22
【问题描述】:

我找到了一个资源,它的代码如下:

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)

我已从类别和产品这两个模型中检索到对象。如何在此视图中实现分页代码?这不是正常的分页,而是搜索结果中的分页。

【问题讨论】:

    标签: python django pagination


    【解决方案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 和其他数据中的类别。

    【讨论】:

      猜你喜欢
      • 2020-05-01
      • 2016-06-13
      • 1970-01-01
      • 2021-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-30
      相关资源
      最近更新 更多