Как реализовать нумерацию страниц в базовых видах функций в django - PullRequest
0 голосов
/ 28 февраля 2020

Я знаю, как реализовать разбиение на страницы в базовых видах классов, используя ListView

class ProductListView(ListView):
       model = product
       template_name = 'products/product_list.html'  
       context_object_name = 'products'
       ordering = ['-pub_date']
       paginate_by = 5

, но я не знаю, как реализовать нумерацию страниц в базовых видах функций. я прочитал, что мы должны импортировать Paginator для django.core.paginator и использовать его в базовом представлении функций, например paginator = Paginator(qs, 5), но он не работает.

    def Productlistview(request):
       qs = product.objects.all()
       location_search = request.GET.get('location')
       print(location_search)
       categories = request.GET.get('categories')
       price = request.GET.get('price')
       ordering = ['-pub_date']
       paginator = Paginator(qs, 5)
       if location_search != "" and location_search is not None:
              qs = qs.filter(location__contains=location_search)

     context = {
       'posts': qs
      }

    return render(request, "products/product_list.html", context)

1 Ответ

0 голосов
/ 28 февраля 2020

Это описано в разделе Пагинация документации . Вы действительно используете paginator, но вам все равно нужно пропустить страницу, которую вы хотите показать. Это часто делается с помощью параметра GET, например, page. Кроме того, вы должны выполнить фильтрацию и заказ перед разбиением на страницы.

def product_list_view(request):
    qs = product.objects.all()
    location_search = request.GET.get('location')
    print(location_search)
    categories = request.GET.get('categories')
    price = request.GET.get('price')
    if location_search:
        qs = qs.filter(location__contains=location_search)
    <b>qs = qs.order_by('-pub_date')</b>
    paginator = Paginator(qs, 5)
    <b>page = p.page(request.GET.get('page'))</b>
     context = {
       'posts': <b>page</b>
      }

    return render(request, "products/product_list.html", context)
...