Как добавить пагинацию в Django?

Я хочу применить пагинацию к моим данным Я пытался посмотреть много видео и прочитать много статей, но все еще не могу решить свою проблему. Вот мои представления

def car(request):
    all_products = None 
    all_category = category.get_all_category()
    categoryid = request.GET.get('category')
    if categoryid:
        all_products = Product.get_all_products_by_id(categoryid)
    else:
        all_products = Product.get_all_products()
        
    data = {}
    data['products'] = all_products  # all products
    
    data['category'] = all_category # all category
    all_products = Product.get_all_products()
    data['product'] = all_products
    ]
    return render(request, 'car.html', data)

Как вы можете видеть, я сделал некоторые изменения в вышеприведенном коде, но это ничего не изменило

def car(request):
    all_products = None 
    all_category = category.get_all_category()
    categoryid = request.GET.get('category')
    if categoryid:
        all_products = Product.get_all_products_by_id(categoryid)
    else:
        all_products = Product.get_all_products()
         #pagination
    paginator = Paginator(all_products,2) **Changes**
    page_number=request.GET.get('page') **Changes**
    finaldata=paginator.get_page(page_number) **Changes**
    
    data = {'all_products':finaldata,}  **Changes**
    data['products'] = all_products #all products
   
    data['category'] = all_category #all category
    all_products = Product.get_all_products()
    data['product'] = all_products
  return render(request, 'car.html', data)

Я хочу отображать 4 продукта на странице Я пытался применить запрос ограничения данных, который работает, но это не настоящий подход к отображению данных. Я читал много статей и смотрел видео на YouTube. но не могу найти никакого решения. какие видео и статьи я смотрел там метод пагинации совершенно другой они используют пагинацию с объектами.all метод для получения всех данных и я использовал .get метод для получения данных я думаю, что это моя проблема. и второе, что они просто работают с простыми данными для пагинации, но в моем случае это так сложно. Я много чего перепробовал, пожалуйста, помогите. Я застрял в решении проблемы уже 5 дней. Я убежден, что я не очень хороший программист. Я много пробовал, но не могу добиться успеха.

Моя проблема почти решена, есть один вопрос. Я не могу получить следующую, предыдущую и последнюю опцию в пагинации, но скоро я это выясню.. вот кодировка моего файла views.py

def car(request):
    all_products = None 
    all_category = category.get_all_category()
    categoryid = request.GET.get('category')
    if categoryid:
        all_products = Product.get_all_products_by_id(categoryid)
    else:
        all_products = Product.get_all_products()
         #pagination
    paginator = Paginator(all_products,3)
    page_number=request.GET.get('page')
    finaldata=paginator.get_page(page_number)

    totalpage=finaldata.paginator.num_pages

    
    data = {'all_products':finaldata,
    'lastpage':totalpage,
    'totalPageList':[n+1 for n in range(totalpage)]}

    data['products'] = finaldata #all products

   
    data['category'] = all_category #all category
    all_products = Product.get_all_products()
    data['product'] = all_products
    
    return render(request, 'car.html', data)

Это моя html кодировка Снимок экрана моего html файла Я выкладываю скриншот html из-за этой ошибки Ваше сообщение, похоже, содержит код, который неправильно оформлен как код. Пожалуйста, отступите весь код на 4 пробела, используя кнопку панели инструментов "Код" или сочетание клавиш CTRL+K. Для получения дополнительной помощи по редактированию нажмите на значок [?] панели инструментов. Похоже, что ваше сообщение состоит в основном из кода; пожалуйста, добавьте больше деталей.

Я не знаком с stack overflow, поэтому я не знаю, что делать, поэтому я поделился скриншотом

когда я найду решение для первого предыдущего и последнего варианта, то скоро поделюсь этим здесь

Основываясь на пагинации документации, это будет что-то похожее на это: (Всегда изучайте документацию фреймворка, это лучший источник для обучения)

views.py

from django.core.paginator import Paginator
from django.shortcuts import render

def car(request, category_id=None):
    products = Products.objects.all() 

    if category_id:
        products = Product.objects.filter(category__id=category_id)

    paginator = Paginator(products, 3)

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

    context = {
        'page_obj': page_obj
    }

    return render(request, 'car.html', context)

tempate.html (где вы получаете доступ к предыдущей и следующей страницам, а также к общему количеству страниц)

{% for car in page_obj %}
    {{ car.category }}<br>
    ...
{% endfor %}

<div class="pagination">
    <span class="step-links">
        {% if page_obj.has_previous %}
            <a href="?page=1">&laquo; first</a>
            <a href="?page={{ page_obj.previous_page_number }}">previous</a>
        {% endif %}

        <span class="current">
            Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
        </span>

        {% if page_obj.has_next %}
            <a href="?page={{ page_obj.next_page_number }}">next</a>
            <a href="?page={{ page_obj.paginator.num_pages }}">last &raquo;</a>
        {% endif %}
    </span>
</div>

urls.py (вы хотите передать category_id, если вы этого не сделаете, он будет none)

path('cars/category/<int:category_id>/', views.car, name='car'),
Вернуться на верх