onskrer
@onskrer
начинающий Fullstack программист

Ошибки во время пагинации Django?

Пагинация работает, но когда выбрана какая-то категория в каталоге товаров, то отображаются просто все товары, даже которые не входят в выбранную категорию, помогите это исправить

views.py
def product_list(request, category_slug=None):
    category = None
    categories = Category.objects.all()
    products = Product.objects.filter(available=True)
    page = request.GET.get('page')
    paginator = Paginator(products, 3)

    if category_slug:
        category = get_object_or_404(Category, slug=category_slug)
        products = products.filter(category=category)


    try:
        products = paginator.page(page)
    except PageNotAnInteger:
        products = paginator.page(1)
    except EmptyPage:
        products = paginator.page(paginator.num_pages)

    return render(request,
                'products/list.html',
                {'category': category,
                'categories': categories,
                'page': page,
                'products': products})


urls.py
urlpatterns = [
    url(r'^$', views.product_list, name='product_list'),
    url(r'^(?P<category_slug>[-\w]+)/$',
        views.product_list,
        name='product_list_by_category'),
    url(r'^(?P<id>\d+)/(?P<slug>[-\w]+)/$',
        views.product_detail,
        name='product_detail'),
]


paginator.html
<nav aria-label="Paginator" class="paginator">
    <ul class="pagination pg-blue justify-content-center">
        {% if products.has_previous %}
        <li class="page-item"><a href="?page=1" class="page-link">В начало</a></li>
        <li class="page-item"><a href="?page={{ products.previous_page_number }}" class="page-link">Назад</a></li>
        {% endif %}
        <li class="page-item"><a class="page-link">{{ products.number }}</a></li>
        {% if products.has_next %}
        <li class="page-item"><a href="?page={{ products.next_page_number }}" class="page-link">Вперед</a></li>
        <li class="page-item"><a href="?page={{ products.paginator.num_pages }}" class="page-link">В конец</a></li>
        {% endif %}
    </ul>
</nav>
  • Вопрос задан
  • 125 просмотров
Решения вопроса 1
@dimuska139
Backend developer
def product_list(request, category_slug=None):
    category = None
    categories = Category.objects.all()
    products = Product.objects.filter(available=True)
    page = request.GET.get('page')
    
    if category_slug:
        category = get_object_or_404(Category, slug=category_slug)
        products = products.filter(category=category)
    
    paginator = Paginator(products, 3)


    try:
        products = paginator.page(page)
    except PageNotAnInteger:
        products = paginator.page(1)
    except EmptyPage:
        products = paginator.page(paginator.num_pages)

    return render(request,
                'products/list.html',
                {'category': category,
                'categories': categories,
                'page': page,
                'products': products})
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы