Разбивка на страницы в Django - PullRequest
2 голосов
/ 22 апреля 2020

В моем проекте Django есть база данных, по которой я делаю запросы. Я хотел бы отобразить ответы на разных страницах.

Если запрос "нет", нумерация страниц работает безупречно.

Но всякий раз, когда я пропускаю запрос, на первой странице отображаются ответы, которые я получаю. ищет, но следующие страницы ведут себя так, как если бы запрос был "none".

Вот мой views.py

def search(request):
    query = request.GET.get('query')    

    if not query:
        products_list= Product.objects.all()        
    else:        
        products_list = Product.objects.filter(name__icontains=query)
    if not products_list.exists():
        products_list = Product.objects.filter(brand__icontains=query)

    title = "Results:  %s" % query

    paginator = Paginator(products_list, 9)
    page = request.GET.get('page',1)

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

    context = {
        'products': products,
        'title': title,
        'paginate': True,
    }
    return render(request, 'finder/search.html', context)

И html:

<nav aria-label="">
  <ul class="pager">
    {% if products.has_previous %}
        <li><a href="?page={{ products.previous_page_number }}">Previous</a></li>
    {% endif %}
    {% if products.has_next %}
        <li><a href="?page={{ products.next_page_number }}">Next</a></li>
    {% endif %}
  </ul>
</nav>

1 Ответ

0 голосов
/ 22 апреля 2020

Передайте свой параметр запроса также в свой шаблон, иначе вы не получите параметр запроса в своей функции

   context = {
        'products': products,
        'title': title,
        'paginate': True,
        'query': query
    }

<nav aria-label="">
  <ul class="pager">
    {% if products.has_previous %}
        <li><a href="?query={{query}}&page={{ products.previous_page_number }}">Previous</a></li>
    {% endif %}
...