项目开发中遇到一个问题: 当分页后还要进行数据处理,可能导致原本分页返回的数据不足,那么需要从另外一页进行数据补全(也要数据进行过滤)。
自己写了一个小的组件:
def data_paging(queryset, page, limit, deal_func=None, *args, **kwargs): # 创建分页器对象 paginator = Paginator(queryset, limit) try: # 尝试获取当前页码的数据 res = paginator.page(page) except EmptyPage: # 如果当前页码超出范围,返回最后一页数据 res = paginator.page(paginator.num_pages) if deal_func: res__ = [x for x in res] return_data = deal_func(res__, *args, **kwargs) # 检查当前页的数据量是否满足每页的数量要求 while len(return_data) < limit and res.has_next(): # 尝试获取下一页的数据来补齐当前页 count = len(return_data) next_page = paginator.page(res.next_page_number()) res.object_list.extend(next_page.object_list[:limit - len(return_data)]) return_data_ = deal_func([x for x in res[count+1:]],*args, **kwargs) return_data.extend(return_data_) return return_data else: res = [x for x in res] return res
上述中:
queryset: 整体查询出来的数据
page:第几页
limit:返回多少条
deal_func:过滤的函数(可以不传)标签:paginator,return,补全,deal,res,data,django,数据,page From: https://www.cnblogs.com/shaoyishi/p/18024933
*args,**kwargs: 过滤函数传参