у меня уже есть список продуктов с функцией фильтра, как добавить нумерацию страниц? - PullRequest
0 голосов
/ 02 апреля 2020

функция ниже имеет фильтр уже. Как добавить нумерацию страниц в django?

def product_list_view(request):
    qs = Product.objects.all()  
    title_query = request.GET.get('title')

    if title_query != '' and title_query is not None:
        qs =qs.filter(title__icontains = title_query)


    context = {
        'queryset':qs,

    }

    return render(request, "products/product_list.html",context)

Ответы [ 2 ]

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

Попробуйте это:

from django.core.paginator import Paginator, EmptyPage, PageNotInteger

def product_list_view(request):
    queryset_list = #Your code to filter here
    paginator = Paginator (queryset_list,  10)
    try:
        queryset = paginator.page(page)
    except PageNotInteger:
        queryset = paginator.page(1)
    except EmptyPage:
        queryset = paginator.page(paginator.num_pages)

context = {'product': queryset}


<nav>
{% if product.has_other_pages %} 
<ul class pagination>
{% if product.has_previous %}
<li class = "page-item">
<a class = "page-link" href="?page={{ product.previous_page_number}}" aria-label="Previous" >
<span aria_hidden="true">Previous</span>
<span class ="sr-only">Previous </span>
</a>
</li>
{% endif %} 

{% for i in product.paginator.page_range %}
{% if product.number == 1%}
<li class="page-item active>
<span class="page-link">{{ i }}  <span class="sr-only">(current)</span></span>
</li>
{% else %}
<li class="page-item>
<a class="page-link" href="?page={{ i }}">{{ i }}</a>
</li>
{% endfor %} 
{% endif %}

{% if product.has_next %}
<li class="page-item">
<a class="page-link" href="?page={{ product.next_page_number}}" aria-label="Next">
<span aria_hidden="true">Next</span>
<span class ="sr-only">Next</span>
</a>
</li>
{% endif %}
</ul>
{% endif %}
</nav>
0 голосов
/ 02 апреля 2020

Вы можете прочитать о нумерации страниц в официальной документации :

from django.core.paginator import Paginator


def product_list_view(request):
    qs = Product.objects.all()  
    title_query = request.GET.get('title')
    page_number = request.GET.get('page') # add this to your request params

    if title_query != '' and title_query is not None:
        qs =qs.filter(title__icontains = title_query)

    paginator = Paginator(qs, 10) # numerical argument stands for the number of records shown per page
    qs = paginator.get_page(page_number)


    context = {
        'queryset':qs,
    }

    return render(request, "products/product_list.html",context)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...