Django Ninja Пагинация: Следующая страница существует?

Внеочередная пагинация Django Ninja's PageNumberPagination сериализует ответ следующим образом:

{
  "items": [
    {...},
    ...
  ],
  "count": 172
}

Вопрос в том, как определить, существует ли объект следующей страницы? Конечно, можно попытаться получить его из размера страницы по длине списка items, но это не сработает, если count аликвотен размеру страницы, поэтому следующая страница будет пустым списком.

Есть ли удобный способ или обходной путь для получения этой информации на фронтенде?

Для простоты рассмотрим пример из документации:

from ninja.pagination import paginate, PageNumberPagination

@api.get('/users', response=List[UserSchema])
@paginate(PageNumberPagination)
def list_users(request):
    return User.objects.all()

Не думаю, что вам нужно знать, есть ли следующая страница. Лучше найти общее количество страниц и работать от текущей страницы и общего количества страниц.

Чтобы правильно рассчитать количество страниц, необходимо использовать округление math.ceil.

import math
#get count item (172)
count_items = pagination["count"]

# 172/50 -> 3.44,  math.ceil(3.44) -> 4
count_page = math.ceil(count_items/ITEMS_PER_PAGE)

#Here's an example of checking if there is a next page:
current_page = request.GET.get("page", 1)
has_next_page = current_page < count_page 

Вы также должны хранить количество элементов на странице в отдельной переменной globals.py. Это облегчит настройку количества элементов на странице в будущем.

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