проблема с разбиением на страницы в функционально-ориентированном виде в Django - PullRequest
0 голосов
/ 02 ноября 2019

не может понять, как использовать нумерацию страниц в такого рода функции.

def product_list(request, category_slug=None):
    category = None
    categories = Category.objects.all()
    products = Product.objects.filter(available=True)

    if category_slug:
        category = get_object_or_404(Category, slug=category_slug)
        products = products.filter(category=category)
    return render(request,
                  'shop/product/list.html',
                  {'category': category,
                   'categories': categories,
                   'products': products,
                   })

Ответы [ 2 ]

0 голосов
/ 02 ноября 2019

Используйте Django Paginator, как описано здесь .

Например, в зависимости от вашего взгляда у вас будет что-то вроде этого:

from django.core.paginator import Paginator

def product_list(request, category_slug=None):
    category = None
    categories = Category.objects.all()
    products = Product.objects.filter(available=True)

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

    # Create a paginator to split your products queryset
    paginator = Paginator(products, 25)  # Show 25 contacts per page
    # Get the current page number
    page = request.GET.get('page')
    # Get the current slice (page) of products
    products = paginator.get_page(page)

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

Проверкассылка выше, чтобы увидеть, как использовать paginator внутри вашего шаблона, например, для создания ссылок на предыдущие / следующие страницы.

0 голосов
/ 02 ноября 2019

Нумерация страниц доступна только в представлениях на основе классов. Он работает, имея метод paginate_queryset .

. Представление списка имеет метод get, который, в свою очередь, вызывает get_context_data,и тогда он вызывает метод набора запросов paginate.

Если вы хотите сделать это в FBV, вам необходимо реализовать аналогичную логику.

...