Как добавить пагинацию в 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">« 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 »</a>
{% endif %}
</span>
</div>
urls.py (вы хотите передать category_id, если вы этого не сделаете, он будет none)
path('cars/category/<int:category_id>/', views.car, name='car'),