Django Ошибка загрузки страницы ?page=undefined

изучаю пагинацию и не понимаю, почему переменная page не определена. Я могу навести курсор на каждый объект страницы и подсказка показывает правильную страницу=page#, каждая кнопка также пронумерована правильно.

Это функция с точки зрения приложения:

def projects(request):
projects, search_query = searchProjects(request)

results = 4
page_number = request.GET.get('page')
if page_number == None:
    page_number = 1

paginator = Paginator(projects, results)

try:
    projects = paginator.page(page_number)
except PageNotAnInteger:
    page_number = 1
    projects = paginator.page(page_number)

context = {
    'projects': projects,
    'search_query': search_query,
    'paginator': paginator
}

return render(request, 'projects/projects.html', context)

html-код для пагинации выглядит следующим образом:

<div class="pagination">
        <ul class="container">
            {% for page in paginator.page_range %}

            {% if page == paginator.number %}
            <li><a href="?page={{page}}" class="btn page-link btn--sub" >{{page}}</a></li>
            {% else %}
            <li><a href="?page={{page}}" class="btn page-link">{{page}}</a></li>
            {% endif %}

            {% endfor %}
        </ul>
      </div>  

при нажатии на страницу, страница не обновляется до нужной страницы и не показывает текущую страницу выделенной, отображается начальное содержимое (1-я страница). Когда я печатаю значения атрибутов пагинатора, я вижу, что генерируются правильные страницы и объекты ссылаются правильно. Просто не понимаю, почему ссылки на якорь {{page}} не возвращаются в представление по событию GET. Вот что, как я подозреваю, вызывает проблему неопределенной страницы.

Спасибо за просмотр!

Django Newbie.

get_page возвращает объект Page, а не Paginator, поэтому при итерации нужно делать paginator.paginator.page_range.

Я бы рекомендовал рефакторинг вашего представления, чтобы избежать путаницы

def projects(request):
    projects, search_query = searchProjects(request)

    results = 4
    page_number = request.GET.get('page',1) # defaults to 1 if null

    paginator = Paginator(projects, results)
    page_object = paginator.get_page(page_num) # use get page to handle edge cases

    context = {
        'projects': projects,
        'search_query': search_query,
        'page_object': page_object # change paginator var name to avoid confusion
    }

    return render(request, 'projects/projects.html', context)

Посмотрите, как вам не нужно обрабатывать исключения, если вы используете get_handle

И ваш цикл теперь будет

{% for page in page_object.paginator.page_range %}

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