@cromvvell

Как вывести объекты бд при помощи пагинации?

Пагинация страниц частично работает, т.е данные бд не отображает, но между страницами переключается

views.py
def catalogue(request):
    list_of_products = Product.objects.all()
    page = request.GET.get('page', 1)
    paginator = Paginator(list_of_products, 4)

    try:
        products = paginator.page(page)
    except PageNotAnInteger:
        products = paginator.page(1)
    except EmptyPage:
        products = paginator.page(paginator.num_pages)
    return render(request, 'catalogue.html', {'products': products})


catalogue.html
{% if products.count > 0 %}
        {% for product in products %}
            <div class="card w-50 content" style="width: 18rem;">
              <div class="card-body">
                <h5 class="card-title">{{product.Name}}</h5>
                <p class="card-text">{{product.Description}}</p>
                <a href="#" class="btn btn-primary">${{product.Price}}</a>
              </div>
            </div>
        {% endfor %}
    {% endif %}
    <nav aria-label=" ">
        <ul class="pagination justify-content-center">
            {% if products.number <= 3 %}
                {% if products.has_previous %}
                    <li class="page-item"><a class="page-link" href="?page={{ products.previous_page_number }}">Предыдущая</a></li>
                {% else %}
                    <li class="page-item disabled"><a class="page-link" href="">Предыдущая</a></li>
                {% endif %}
                <li class="page-item"><a class="page-link" href="?page=1">1</a></li>
                <li class="page-item"><a class="page-link" href="?page=2">2</a></li>
                <li class="page-item"><a class="page-link" href="?page=3">3</a></li>
                {% if products.has_next %}
                    <li class="page-item"><a class="page-link" href="?page={{ products.next_page_number }}">Следующая</a></li>
                {% else %}
                    <li class="page-item disabled"><a class="page-link" href="">Следующая</a></li>
                {% endif %}
            {% endif %}
        </ul>
    </nav>


В urlpatterns добавил
path('catalogue', views.catalogue)

Подскажите пожалуйста что не так, посоветуйте как сделать лучше при возможности
  • Вопрос задан
  • 194 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Mastermind-S
Почему не используешь ListView с готовой логикой? Это первое, второе, возьми инстанс продукта и выведи его атрибуты с помощью dir() (или посмотри модели), может быть, у тебя что то не так с именами атрибутов? Третье {% if products.count > 0 %} нужно заменить на {% if products %} смысл не поменяется, код станет короче и, скорее всего у тебя тут проблема, пагинатор - не кверисет.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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