Почему он не получает нумерацию страниц? - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь разработать веб-сайт, на котором я написал функциональное представление и теперь хочу добавить нумерацию страниц. Я следую документации django, но она просто не собирается. Кто-нибудь может мне помочь? мои views.py:

from django.shortcuts import render, Http404
from django.http import HttpResponse
from .models import Product
from django.core.paginator import Paginator

def home(request):
    products = Product.objects.all()
    paginator = Paginator(products, 6)

    page_number = request.GET.get('page')
    page_obj = paginator.get_page(page_number)

    return render(request, 'index.html', {'products': products})

1 Ответ

3 голосов
/ 28 марта 2020

Во-первых, вы можете преобразовать параметр page в int:

page_number = int(page_number)

Затем вы все равно передаете исходный набор запросов в свой шаблон. Чтобы передать список объектов, разбитый на страницы, выполните:

return render(request, 'index.html', {'products': page_obj.object_list})

Или, что еще более полезно, передайте объект страницы:

return render(request, 'index.html', {'page_obj': page_obj})

Таким образом, у вас есть вся информация для доступа к списку объектов, но и для создания следующей и предыдущей ссылки.

Еще удобнее, вы можете использовать класс ListView:

class HomeView(ListView):
    model = Product
    paginate_by = 6
    context_object_name = 'products'
    template_name = 'index.html'

Если вы просматриваете код, вам даже не придется переопределять ни одно из значений по умолчанию поведение, чтобы вы могли напрямую использовать ListView в вас urls:

urlpatterns = [
    # ...
    path('', ListView.as_view(model=Product, 
                              paginate_by=6, 
                              context_object_name='products', 
                              template_name='index.html'), name='index')
    # ...
]
...