开箱即用的分页 Django Ninja 的
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
中的单独变量中。这将使将来更容易调整页面项目计数。