Пагинация ListView редиректит на главную страницу
Делаю пагинацию на основе класса Listview. При нажатии на любую кнопку - "Следующая страница", "1 2 3" меня редиректит на главную страницу "home". Может кто ни будь сможет объяснить почему это происходит? Не прошу писать за меня код, просто объясните в чем тут дело.
views.py
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')
Так то же не работает
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
Через функцию то же не работает
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})
all_post.html
<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="Предыдущая страница">«</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="Следующая страница">»</a>
{% endif %}
</div>
</section>
И так то же не работает
{% 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 }}"><</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 }}">></a>
</li>
{% endif %}
</ul>
</nav>
{% endif %}
urls.py
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'),
Как следует из вопроса, автор не просит написать код, а объяснить причину. На мой взгляд, нужно проверить и использовать следующие вещи:
Переходите ли вы по адресу: http://127.0.0.1:8000/all_post/, а не
all_post
безслэша
.В шаблоне используйте стандартные переменные
is_paginated
,page_obj
,paginator
. Не дублируйте сами вручнуюPaginator
там, где он не нуженЛично у меня был такой кейс, что у меня в проекте жил и мешал редирект что то типа этого
request.GET.get('page')
проверьте подобные вещи в вашем. Обычно может что то наследуется изbase.html
может там какие то редиректы есть.