Задать вопрос
@DmSS1997

Как сделать правильно работающую пагинацию при использовании django-filters?

Необходимо было реализовать фильтр на сайте для записей. Так же до этого была реализована пагинация для записей. С фильтром разобрался и сделал, записи отлично фильтруются, но при переходе на другую страницу фильтр не сохранялся. Решил в ссылке на следующую страницу реализовать выгрузку всех данных из GET запроса и теперь при переходе на вторую станицу фильтрация сохранялась.
Вот код из Views
class MainPage(ListView):
    model = DailyOrders
    template_name = 'Catalog/main_page.html'
    context_object_name = 'orders'
    paginate_by = 3
    allow_empty = True

    def get_context_data(self, *, object_list=None, **kwargs):
        context = super().get_context_data(**kwargs)
        context['form'] = ClientsForm()
        context['filter'] = DailyOrdersFilter(self.request.GET, queryset = DailyOrders.objects.all())
        return context

   def get_queryset(self):
        qs = DailyOrders.objects.all()
        word = DailyOrdersFilter(self.request.GET, queryset=qs)
        return word.qs


Вот как в html
{% for order in orders%}
                    <tr>
                        <td>{{order.data|date:"d.m.Y"}}</td>
                        <td>{{order.city}}</td>
                        <td>{{order.name_of_company}}</td>
                        <td>{{order.kind_of_activity}}</td>
                        <td>{{order.details}}</td>
                        <td>{{order.square}}</td>
                        <td>{{order.floor}}</td>
                        <td>{{order.requirements}}</td>
                        <td>{{order.district}}</td>
                        <td>{{order.budget}}</td>
                    </tr>
                    {% endfor %}
                </table>
            </div>
            {% if page_obj.has_other_pages %}
            <nav aria-label="Page navigation example">
                <ul class="pagination justify-content-center my-3">
                    {% if page_obj.has_previous %}
                    <li class="page-item    ">
                        <a class="page-link text-dark" href="?page={{page_obj.previous_page_number}}{% if request.GET%}&{{ request.GET.urlencode }}{% endif %}"
                           tabindex="-1">Пердыдущая</a>
                    </li>
                    {% endif %}
                    {% for p in page_obj.paginator.page_range %}

                    {% if page_obj.number == p %}
                    <li class="page-item active" aria-current="page">
                        <a class="page-link text-dark bg-danger border-dark" href="?page={{p}}{% if request.GET%}&{{ request.GET.urlencode }}{% endif %}">{{p}}</a>
                    </li>
                    {% elif p > page_obj.number|add:-3 and p < page_obj.number|add:3 %}
                    <li class="page-item"><a class="page-link text-dark " href="?page={{p}}{% if request.GET %}&{{ request.GET.urlencode}}{% endif %}">{{p}}</a></li>
                    {% endif %}


                    {% endfor %}
                    {% if page_obj.has_next %}
                    <li class="page-item">
                        <a class="page-link text-dark " href="?page={{page_obj.next_page_number}}{% if request.GET%}&{{ request.GET.urlencode }}{% endif %}"
                           tabindex="-1">Следующая</a>
                    </li>
                    {% endif %}
                </ul>
            </nav>
            {% endif %}


Но проблема в том, что теперь дальше со второй страницы никуда перейти нельзя, т.к в url сохраняется абсолютно всё и переход сделать невозможно. (Здесь я попытался перейти со второй страницы на третью)
http://127.0.0.1:8000/?page=3&page=2&city=Казань&square_for_filter_min=&square_for_filter_max=&floor=&district=&budget_for_filter_min=&budget_for_filter_max=

Прошу помочь разобраться с тем, как это сделать, пожалуйста
  • Вопрос задан
  • 1043 просмотра
Подписаться 2 Средний 1 комментарий
Решения вопроса 1
DmSS1997 вот такое элегантное решение имеется django-spurl ссылки на другие страницы делаются примерно вот так
{% load spurl %}

<a class="page-link" href="{% spurl query=request.GET set_query='page={{ p }}'%}">{{ p }}</a>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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