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
. Это облегчит настройку количества элементов на странице в будущем.