【Django】分页Pagination | DRF的分页

Django自带的Pagination个人觉得就挺好用的,可以直接参考官网文档,Pagination,个人觉得非常清晰明了了

至于DRF的分页,好像需要遵循它的一些规则才能用,我就没用。但查找中的学习材料记录一下:
Django-drf-内置分页器的使用:其中Ⅴ 继承APIView的分页方式比较适用于我
DRF的分页
如果用DRF的方法,又想获取到Django自带的Pagination实例中的一些参数,假设DRF PageNumberPagination的实例时p_obj,p_obj.page.paginator就是Pagination实例,后面再跟Pagination(django官方文档Paginator)的特有参数即可

DRF的pagination + serializer联合使用

from rest_framework.pagination import PageNumberPagination

# 自定义了一个类,可以让前端传入page_size,不同写死一页有多少数据
class BasePageNumberPagination(PageNumberPagination)
	def __init__(self, page_size):
		self.page_size = page_size

# View中调用代码
p_obj = BasePageNumberPagination(page_size)
# request除page_size参数外还需定义一个page参数,表明当前数据是第几页
obj_list = p_obj.paginate_queryset(obj_list, request, self)	
ser = ObjSerializer(obj_list, many=True)
# 给前端返回ser.data

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django 中的分页通常涉及到 `Paginator` 和模板标签 `{% for %}` 的结合使用。当你有一个大的数据集合,想要展示给用户的小部分数据时,分页就很有帮助了。`django.core.paginator.Paginator` 类用于对数据进行切分。 首先,你需要创建一个 `Paginator` 对象,指定每页显示多少条记录,然后调用 `paginate()` 方法,它会返回一个包含当前页面数据和总页数的对象: ```python from django.core.paginator import Paginator # 假设qs是一个查询集 page_obj = Paginator(qs, per_page=10) # 每页10条 ``` 接着,在模板中,你可以通过循环遍历这个对象的 `object_list` 属性获取当前页的数据,并使用 `page_number` 或 `page_range` 获取页码范围。例如: ```html {% load paginator_tags %} {% autopaginate object_list %} <ul> {% for item in object_list %} <li>{{ item }}</li> {% endfor %} </ul> <nav> <ul class="pagination"> {% if page_obj.has_previous %} <a href="?page={{ page_obj.previous_page_number }}">上一页</a> {% endif %} {% for page in page_obj.page_range %} {% if page == page_obj.number %} <span class="current">{{ page }} / {{ page_obj.paginator.num_pages }}</span> {% else %} <a href="?page={{ page }}">{{ page }}</a> {% endif %} {% endfor %} {% if page_obj.has_next %} <a href="?page={{ page_obj.next_page_number }}">下一页</a> {% endif %} </ul> </nav> {% paginate %} ``` 在这里,`{% autopaginate %}` 标签自动插入分页链接,`{% paginate %}` 则关闭分页处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值