Форум программистов, компьютерный форум, киберфорум
Python: Django
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 14.01.2020
Сообщений: 10

Пагинация отфильтрованных данных

28.09.2020, 16:38. Показов 3195. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, подскажите, как мне сделать пагинацию для отфильтрованных данных. На сайт выводятся объявления, пагинация работает корректно. После того как данные отфильтровать по стоимости с помощью формы, только на первой страница выводится верный контекст, при переходе на вторую страницу - отображается полный список объявлений.
В браузере в адресной строке видно Get запрос при фильтрации
выглядит так:
HTML5
1
127.0.0.1:8000/?csrfmiddlewaretoken=WGEpWplTelAXWWXQxJ2UxgNugtYlHIDHF1s8EkaSDI85Fi79Gd0wOhDbxhyCmUxy&min_price=0&max_price=33
при переходе на вторую страницу меняется на:
HTML5
1
127.0.0.1:8000/?page=2
Подскажите в какую сторону копать что бы вопрос решить) или возможно есть примеры, уже готовые, в которых данный вопрос решен. Спасибо.

файл view:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def ad_onliner(request):
    post = AdForSaleOnliner.objects.all()
 
    form = FormFilter(request.GET)
    if form.is_valid():
        if form.cleaned_data['min_price']:
            post = post.filter(cost__gte=form.cleaned_data['min_price'])
        if form.cleaned_data['max_price']:
            post = post.filter(cost__lte=form.cleaned_data['max_price'])
 
    paginator = Paginator(post, 5)
    page_num = request.GET.get('page', 1)
    page_objects = paginator.get_page(page_num)
 
    context = {
        'page_obj': page_objects,
        'title': 'Список объявлений',
        'form': form
 
    }
    return render(request, 'ad_for_sale/ad_onliner.html', context)
файло urls:
Python
1
2
3
4
5
6
7
8
from django.urls import path
from ad_for_sale.views import *
 
 
urlpatterns = [
    path('', ad_onliner, name='ad_onliner'),
    path('<int:ad_id>/', view_ad_onliner, name='view_ad_onliner'),
]

файл шаблона:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
{% block content %}
<div class="col-2">
    <div class="card mb-4 shadow-sm">
        <div class="form-group">
            <h5>Фильтр</h5>
            <form action=" " method="get" enctype="multipart/form-data">
                {% csrf_token %}
                {{ form.as_p }}
                <button type="submit"  class="btn btn-primary btn-block">Найти</button>
            </form>
        </div>
    </div>
</div>
 
 
 
<div class="col-md-10">
 
<nav aria-label="Page navigation example">
  <ul class="pagination">
      {% if page_obj.has_previous %}
        <li class="page-item">
          <a class="page-link" href="?page={{page_obj.previous_page_number}}" aria-label="Previous">
            <span aria-hidden="true">&laquo;</span>
            <span class="sr-only">Previous</span>
          </a>
        </li>
      {% endif %}
 
      {% for p in page_obj.paginator.page_range %}
        <li class="page-item"><a class="page-link" href="?page={{ p }}">{{ p }}</a></li>
      {% endfor %}
 
      {% if page_obj.has_next %}
        <li class="page-item">
          <a class="page-link" href="?page={{page_obj.next_page_number}}" aria-label="Next">
            <span aria-hidden="true">&raquo;</span>
            <span class="sr-only">Next</span>
          </a>
        </li>
      {% endif %}
  </ul>
</nav>
 
.........
{% endblock %}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.09.2020, 16:38
Ответы с готовыми решениями:

Вывод отфильтрованных данных
Товарищи, подскажите. Есть столбец в котором числа: 9, 16, 17. Делаем orderBy с реверсом и по клику. В общем, 9 фильтрует как бОльшее...

Удаление отфильтрованных данных
Парни всем привет. Есть такой код под фильтрацию.Подскажите, что дописать в коде, чтобы значения которые он отфильтровал просто удалились....

Выполнить макрос в отфильтрованных данных
Приветствую! Подскажите как выполнить макрос в отфильтрованных данных? На данный момент если я фильтрую данные, то он выполняет во...

2
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
05.10.2020, 15:47
Цитата Сообщение от AliaksandrH Посмотреть сообщение
<a class="page-link" href="?page={{page_obj.next_page_number} }" aria-label="Next">
Ты здесь теряешь аргументы для фильтрации.

Попробуй как-то так
HTML5
1
2
        <a class="page-link" href="{% url url_name page.paginator.num_pages %}
{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}">
1
0 / 0 / 0
Регистрация: 14.01.2020
Сообщений: 10
06.10.2020, 00:45  [ТС]
Практически всё получилось.
HTML5
1
<a class="page-link" href="{% url 'ad_onliner_f' p %} {% if request.GET %}?{{ request.GET.urlencode }}{% endif %}  ">{{ p }}</a>
файл url:
HTML5
1
path('?page=<int:page>', ad_onliner, name='ad_onliner_f'),
файл view:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def ad_onliner(request, page=1):
    post = AdForSaleOnliner.objects.all()
 
    form = FormFilter(request.GET)
    if form.is_valid():
        if form.cleaned_data['min_price']:
            post = post.filter(cost__gte=form.cleaned_data['min_price'])
        if form.cleaned_data['max_price']:
            post = post.filter(cost__lte=form.cleaned_data['max_price'])
 
    paginator = Paginator(post, 5)
    page_num = request.GET.get('page', page)
    page_objects = paginator.get_page(page_num)
 
    context = {
        'page_obj': page_objects,
        'title': 'Список объявлений',
        'form': form
 
    }
    return render(request, 'ad_for_sale/ad_onliner.html', context)
без фильтрации GET запрос получается следующим:
HTML5
1
127.0.0.1:8000/%3Fpage=2
с фильтрацией и переходом на вторую страницу следующее:
HTML5
1
127.0.0.1:8000/%3Fpage=2%20?min_price=0&max_price=33
и соответственно ошибка.

Но если убрать из запроса "%20" что бы получилось
HTML5
1
127.0.0.1:8000/%3Fpage=2?min_price=0&max_price=33
всё корректно работает.
Может подскажите как исправить и откуда появляется "%20", как я понимаю это закодированный символ пробела.

Добавлено через 5 минут
Всё, нашел проблему, нужно исправить ссылку, убрать пробел лишний.
HTML5
1
<a class="page-link" href="{% url 'ad_onliner_f' p %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}">{{ p }}</a>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.10.2020, 00:45
Помогаю со студенческими работами здесь

Получение отфильтрованных и отсортированных данных из EF
Всем привет. Волею судем закинуло мне совсем не подготовленного на C# да еще и на бекенд. Пытаюсь разобраться как получить данные...

Фильтрация в уже отфильтрованных данных
Как сделать фильтрацию в периоде дат? т.е. сначала делается фильтрация диапазона дат, а потом в этом отфильтрованном диапазоне делается еще...

Создание таблицы из отфильтрованных данных
Есть таблица, в которой есть выделенные цветом строки. Как создать документ в котором будут только выделенные строки, по возможность с...

Отображение в ПолеСоСписком отфильтрованных по времени данных
Возможно ли реализовать следующее в форме? Имеется ПолеСоСписком из которого выбираешь все записи, но мне необходимо чтобы в ПолеСоСписком...

Копирование отфильтрованных данных в новый файл
Sub Создать_заявление() Newbook = &quot;C:\Users\ПК\Desktop\probnaya&quot; Path = ThisWorkbook.Path Sheets(&quot;Данные&quot;).Select For i = 2 To...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru