如何同时使用分页和过滤?我有问题,因为他们不想互相工作,没有过滤器分页工作,但是使用过滤器我的应用程序崩溃了。我知道他们是一些如何在堆栈溢出中执行此操作的示例,并且似乎thaat问题在html文件中,但是此示例对我来说是完全可以理解的,如果有人向我展示我必须在代码中进行的更改,我将不胜感激,然后我会更好地理解这一点。我目前正在学习Django,但在理解别人的代码时仍然遇到问题,我非常了解我的代码中我做了什么,但是当我看到别人的代码看起来与我的代码不同时,我不知道发生了什么。
views.py
def Product_list(request, category_slug=None):
category=None
categories=Category.objects.all()
products=Product.objects.all()
paginator=Paginator(products, 6)
page=request.GET.get('page')
products=paginator.get_page(page)
if category_slug:
category=get_object_or_404(Category, slug=category_slug)
products=products.filter(category=category)
return render(request, 'shop/product/Product_list.html',
{'products':products, 'category':category,
'categories':categories,})
product_list.html
<div class='paginator'>
{% if products.has_previous %}
<a href='?page1'><<</a>
<a href='?page={{products.previous_page_number}}'><</a>
{%endif%}
{%for num in products.paginator.page_range%}
{% if products.number == num %}
<strong>{{num}}</strong>
{%elif num > products.number|add:'-3' and num < products.number|add:'3' %}
{{num}}
{%endif%}
{%endfor%}
{% if products.has_next %}
<a href='?page={{products.paginator.num_pages}}'>>></a>
<a href='?page={{products.next_page_number}}'>></a>
{%endif%}
</div>
答案 0 :(得分:1)
您只能过滤QuerySet
。但是在您看来,您是先进行分页(因此products
现在是Page
),然后尝试过滤该Page
对象。您应该仅在之后进行分页,并在最后QuerySet
处应用所有过滤器。