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

Пагинация ListView

18.02.2025, 11:31. Показов 2336. Ответов 12

Студворк — интернет-сервис помощи студентам
Привет. Какой то ужас, делаю пагинацию, при нажатии на любую из кнопок почему то происходит редирект на главную страницу. Пагинацию делаю через ListView

views.py

Python
1
2
3
4
5
6
7
8
class AllPost(DataMixin, ListView):
    template_name = 'main_package/all_post.html'
    context_object_name = 'all_post'
    title_page = 'ПЛАТФОРМА44.РУ - Все статьи'
    paginate_by = 9
 
    def get_queryset(self):
        return Post.published.all().select_related('cat')
Пробовал через функцию результат тот же редирект на главную

Python
1
2
3
4
5
6
7
8
 contact_list = Post.published.all()
    paginator = Paginator(contact_list, 3)
 
    page_number = request.GET.get('page')
    page_obj = paginator.get_page(page_number)
 
    return render(request, 'main_package/all_post.html',
                  {'title': 'Все статьи', 'page_obj': page_obj})
urls.py

Python
1
2
3
4
5
6
7
8
urlpatterns = [
    path('', views.PlatformaHome.as_view(), name='home'),
    path('category/<slug:cat_slug>/', views.PlatformaCategory.as_view(), name='category'),
    path('post/<slug:post_slug>/', views.ShowPost.as_view(), name='post'),
    path('addpage/', views.AddPage.as_view(), name='addpage'),
    path('edit/<slug:slug>/', views.UpdatePage.as_view(), name='edit_page'),
 
    path('all_post/', views.AllPost.as_view(), name='all_post'),
all_post.html - часть кода

Пробовал выводить в <ul><li> результат тот же редирект на главную

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
<section class="pagination-section text-center d-none d-md-block">
 
        <a href="?page={{ page_obj.next_page_number }}" class="button" title="Следующая страница"
           {% if not page_obj.has_next %} style="display:none;" {% endif %}>Следующая страница <i
                class="fa fa-angle-double-right"></i></a>
 
        <div class="pagination">
 
            {% if page_obj.has_previous %}
            <a href="?page={{ page_obj.previous_page_number }}" class="pagination-left" title="Предыдущая страница">&laquo;</a>
            {% endif %}
 
 
            {% for p in page_obj.paginator.page_range %}
            {% if page_obj.number == p %}
            <span class="active">{{ p }}</span>
            {% else %}
            <a href="?page={{ p }}" title="Перейти на страницу {{ p }}">{{ p }}</a>
            {% endif %}
            {% endfor %}
 
            {% if page_obj.has_next %}
            <a href="?page={{ page_obj.next_page_number }}" class="pagination-right"
               title="Следующая страница">&raquo;</a>
            {% endif %}
        </div>
    </section>
И так то же редиректит на главную.........

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
{% if page_obj.has_other_pages %}
<nav class="list-pages">
    <ul>
        {% if page_obj.has_previous %}
        <li class="page-num">
            <a href="?page={{ page_obj.previous_page_number }}">&lt;</a>
        </li>
        {% endif %}
 
        {% for p in paginator.page_range %}
        {% if page_obj.number == p %}
        <li class="page-num page-num-selected">{{ p }}</li>
        {% elif p >= page_obj.number|add:-2 and p <= page_obj.number|add:2 %}
        <li class="page-num">
            <a href="?page={{ p }}">{{ p }}</a>
        </li>
        {% endif %}
        {% endfor %}
 
        {% if page_obj.has_next %}
        <li class="page-num">
            <a href="?page={{ page_obj.next_page_number }}">&gt;</a>
        </li>
        {% endif %}
 
    </ul>
</nav>
{% endif %}
Если кто знает объясните пожалуйста почему так происходит?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.02.2025, 11:31
Ответы с готовыми решениями:

Пагинация в ListView Django
Доброго времени суток. Собственно, вопрос: В ListView можно установить атрибут paginate_by для включения уже прикрученного к вьюхе...

Пагинация и поиск
Поставил на странице максимум 5 статей, после чего можно воспользоваться переносом на следующую страницу. Есть поиск статей на сайте. Если...

Пагинация отфильтрованных данных
Здравствуйте, подскажите, как мне сделать пагинацию для отфильтрованных данных. На сайт выводятся объявления, пагинация работает корректно....

12
0 / 0 / 0
Регистрация: 19.05.2020
Сообщений: 11
18.02.2025, 21:18  [ТС]
Ёпте кто ни будь объясните в чем тут дело?

Добавлено через 45 минут

И так не работает

views.py

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class AllPost(DataMixin, ListView):
    template_name = 'main_package/all_post.html'
    context_object_name = 'all_post'
    title_page = 'ПЛАТФОРМА44.РУ - Все статьи'
    contact_list = Post.published.all()
    paginator = Paginator(contact_list, 4)
    paginate_by = 9
 
    def get_queryset(self):
        return Post.published.all()
 
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['page_obj'] = self.paginator.page(self.request.GET.get('page', 1))
        return context
0
150 / 120 / 36
Регистрация: 01.11.2019
Сообщений: 425
19.02.2025, 13:38
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
class AllPost(DataMixin, View):
  
  template_name = 'main_package/all_post.html' # Может all_post.html?
  
  def get( self, request, *args, **kwargs):
 
    contact_list = Post.published.all()
    paginator = Paginator(contact_list, 12)
    page_obj = paginator.get_page(request.GET.get('page', ''))
 
    context = {'records':page_obj}
   
    return render(request, self.template_name, context)

Попробуйте, еще проверьте правильно ли указан путь к шаблону и какие ссылки выводит браузер
0
0 / 0 / 0
Регистрация: 19.05.2020
Сообщений: 11
19.02.2025, 15:55  [ТС]
Спасибо. При добавлении функции отображается пустая страница(без контекста, без кнопок пагинации).
Без функции: при переходе на страницу all_post в браузере - http://127.0.0.1:8000/all_post/, а вот при нажатии на кнопку пагинации в браузере - http://127.0.0.1:8000/?page=3 Куда пропадает путь /all_post/ я не понимаю.
И еще момент шаблон all_post.html почему то не активный. Файл вложу. Удалил создал новый, он все равно не активный. Может причина в этом?
Вопрос не решен, но все равно огромное Спасибо. У меня просто нет больше вариантов куда копать.
Миниатюры
Пагинация ListView  
0
150 / 120 / 36
Регистрация: 01.11.2019
Сообщений: 425
19.02.2025, 16:06
Цитата Сообщение от volkomorov Посмотреть сообщение
context = {'records'age_obj}
Тут я косякнул, копировал со своего проекта. Надо 'records' поправить на ваше значение.

Цитата Сообщение от bakush Посмотреть сообщение
Куда пропадает путь /all_post/
В основном urls указали маршрут приложения?

И еще надо убрать слеш
Python
1
path('all_post/', views.AllPost.as_view(), name='all_post'),
0
0 / 0 / 0
Регистрация: 19.05.2020
Сообщений: 11
19.02.2025, 16:12  [ТС]
В urls.py все указано. Вроде бы все правильно.
Миниатюры
Пагинация ListView  
0
0 / 0 / 0
Регистрация: 19.05.2020
Сообщений: 11
19.02.2025, 16:17  [ТС]
это основной урл
Миниатюры
Пагинация ListView  
0
0 / 0 / 0
Регистрация: 19.05.2020
Сообщений: 11
19.02.2025, 16:23  [ТС]
Без слеша - Page not found (404)
Request Method: GET
Request URL: http://127.0.0.1:8000/all_post/
The current path, all_post/, didn’t match any of these.
0
0 / 0 / 0
Регистрация: 19.05.2020
Сообщений: 11
21.02.2025, 22:23  [ТС]
Вопрос решен. Все дело в слеше в base.html

HTML5
1
2
    <meta charset="utf-8">
    <base href="/">
Миниатюры
Пагинация ListView  
0
150 / 120 / 36
Регистрация: 01.11.2019
Сообщений: 425
24.02.2025, 08:58
Лучше удалить этот тег.
1
0 / 0 / 0
Регистрация: 19.05.2020
Сообщений: 11
24.02.2025, 18:18  [ТС]
Причина? Это не поломает мне фронт?
Объясню свои тупые вопросы.
Моя жена работает в детском саду. В 22 году я сверстал сайт на html, css, js что бы она продвигала д\с и делилась с другими методистами наработками. При этом я не программист и не веб разработчик. Сайт статический. Всю информацию я закидываю на него сам. Мне это надоело. Я решил написать бэкенд. Выучил посредственно python в декабре, выбрал django и по документации Django стал делать бэкенд. Для моих скрипучих шестеренок я проделал колоссальную работу. Осталось сделать авторизацию и личный кабинет пользователя и закрутить все это в Docker. По этому я и задаю такие вопросы.
0
150 / 120 / 36
Регистрация: 01.11.2019
Сообщений: 425
25.02.2025, 10:04
Да я собственно тоже не программист. Все узнаю из документации, а так же смотрю как сверстаны сторонние сайты. Я не использую <base>, работает все без проблем. Лучше уж urls настроить правильно, нежели помнить о каком то давно забытом теге.
0
 Аватар для kazak
3599 / 2741 / 354
Регистрация: 11.03.2009
Сообщений: 6,298
27.02.2025, 13:22
Лучший ответ Сообщение было отмечено bakush как решение

Решение

Цитата Сообщение от bakush Посмотреть сообщение
при переходе на страницу all_post в браузере - http://127.0.0.1:8000/all_post/, а вот при нажатии на кнопку пагинации в браузере - http://127.0.0.1:8000/?page=3 Куда пропадает путь /all_post/ я не понимаю.
Цитата Сообщение от bakush Посмотреть сообщение
<a href="?page={{ p }}" title="Перейти на страницу {{ p }}">{{ p }}</a>
Тут href без лидирующего слеша, а значить это относительный путь. По умолчанию полный путь определяется как <URL текущей страницы>+<href>, соответственно, если мы находимся на странице http://127.0.0.1:8000/all_post/, то полный путь для href="?page={{ p }}" будет http://127.0.0.1:8000/all_post/?page=X.
Тег base переопределяет базовый путь для относительных ссылок на странице, и относительные ссылки будут приводиться к типу <URL из base>+<href>
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.02.2025, 13:22
Помогаю со студенческими работами здесь

Django пагинация [prev 1 2 3 . 67 . 98, 99, 100 next]
Доброго времени суток. Мне нужно сделать такую пагинацию Делаю по этой статье. Скопировал все к себе с github'a, но в итоге ругается...

При деплое перестает работать пагинация
Почему происходит так что при деплое проекта на джанго перестает работать пагинация. Код проверил уже десять раз, на локальном и на...

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

Парсинг сайта с книжечками. Проблемы с пагинацией
В образовательных целях, сделал парсер. Парсил goodreads. Как бы, самый подходящий ресурс, ИмХО. Амазон море инфы по авторам книг, но -...

Django 1.10. Как передать в context шаблона номер страницы пагинации при использовании Class Based Views ?
Суть - с шаблона &quot;детальный вид&quot; хочу возвращаться на &quot;свою&quot;(с которой перешел на детальный вид) страницу &quot;список&quot;, а не на...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru