Есть две вьюхи, в первой просто каталог, во второй отфильтрованный каталог.
Все работает, но на отфильтрованном каталоге не работает пагинация, все фильтры сбрасывает. Как это пофиксить?
views.py
class ProductList(ListView):
"""Отображение продуктов"""
model = Product
template_name = 'catalog/product_list.html'
paginate_by = 3
def get_context_data(self, *, object_list=None, **kwargs):
context = super().get_context_data(*kwargs)
context['products'] = Product.objects.filter(is_available=True)
return context
class ProductListFilter(ListView):
"""Отображение отфильтрованных продуктов"""
model = Product
template_name = 'catalog/product_list.html'
paginate_by = 3
def get_queryset(self):
return Product.objects.filter(
Q(type_of_product__slug__in=self.request.GET.getlist('type')) |
Q(rubric__slug__in=self.request.GET.getlist('rubric'))
).distinct()
urls.py
urlpatterns = [
path('catalog/', views.ProductList.as_view(), name='catalog'),
path('filter/', views.ProductListFilter.as_view(), name='catalog_filter'),
path('<str:slug>', views.ProductDetail.as_view(), name='product_detail'),
]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
html
<div class="pagination-block">
<div class="pagination-block-content">
{% if page_obj.has_previous %}
<a class="btn btn-outline-dark" href="?page=1"> |< </a>
<a class="btn btn-outline-dark" href="?page={{ page_obj.previous_page_number }}"> < </a>
{% endif %}
<span class="current">
{{ page_obj.number }} из {{ page_obj.paginator.num_pages }}.
</span>
{% if page_obj.has_next %}
<a class="btn btn-outline-dark" href="?page={{ page_obj.next_page_number }}"> > </a>
<a class="btn btn-outline-dark" href="?page={{ page_obj.paginator.num_pages }}"> >| </a>
{% endif %}
</div>
</div>{#PAGINATION#}