Пагинация 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="Предыдущая страница">&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>

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

{% 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 %}

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'),

Как следует из вопроса, автор не просит написать код, а объяснить причину. На мой взгляд, нужно проверить и использовать следующие вещи:

  1. Переходите ли вы по адресу: http://127.0.0.1:8000/all_post/, а не all_post без слэша.

  2. В шаблоне используйте стандартные переменные is_paginated, page_obj, paginator. Не дублируйте сами вручную Paginator там, где он не нужен

  3. Лично у меня был такой кейс, что у меня в проекте жил и мешал редирект что то типа этого request.GET.get('page') проверьте подобные вещи в вашем. Обычно может что то наследуется из base.html может там какие то редиректы есть.

Вернуться на верх