Django CursorPagination 方法分页,总页数怎么弄进去
defget(self,request,*args, **kwargs):role=models.Role.objects.all()
page_count=math.ceil(role.count()/4)#计算总页数,向上取整
pg=CursorPagination() #创建分页对象
pg.page_size=4 #每页4行
pg.ordering='-id' #排序 -id倒序
pager_role=pg.paginate_queryset(queryset=role,request=request,view=self) #获取分页数据,获取 request 中的 page=""
ser=PageSerializer(instance=pager_role,many=True) #序列化
return pg.get_paginated_response(ser.data) #这里可以加进个总页数的参数吗???????,不知道怎么加进去,
我现怎么把 总页数返回给前端 首先你要明白,"传给前端" 其实是 用什么方法(函数)来传递对象或参数。
具体到Django里,一般是用 render()方法 打通 views.py(后端) 到 html模板(前端)。
def listing(request):
# 通过模型对象ORM的查询方式获取数据
# pds = PD.objects.get_queryset().order_by('product_id')
# Django使用SQL的一种方式
pds = PD.objects.raw("select * from product_descriptions where product_id <= 1736")
paginator = Paginator(pds, 10)# 创建分页对象,每10条数据为一页
items_cnt = paginator.count # 总共多少条数据
page_num = request.GET.get('num', 1) # 默认取第一页。 url 如 http://127.0.0.1:8000/page?num=2
page_obj = paginator.get_page(page_num)
return render(request, 'listing2.html', {'page_obj': page_obj, 'items_cnt': items_cnt})
# render()函数实现views视图("后端控制")和模板("前端显示")之间的对象或参数传递,并实现"渲染/更新网页"
# 把分页对象,和任何需要传递的参数,用字典传给模板。然后就可以在模板里调用,如 <div>----- 一共 {{items_cnt}} 条记录 ----</div>
阿奇_o 发表于 2021-9-29 18:43
首先你要明白,"传给前端" 其实是 用什么方法(函数)来传递对象或参数。
具体到Django里,一般是用 ren ...
render 我会弄, 上面是 rest framework 框架下实现分页 本帖最后由 阿奇_o 于 2021-10-2 11:56 编辑
niceyes 发表于 2021-9-29 21:32
render 我会弄, 上面是 rest framework 框架下实现分页
rest framework 是什么。。
好吧,你成功勾起了我的好奇心,于是我研究了两三天。。
第一天搞明白了REST是什么鬼,Django的rest framework 又怎么用,这个DRF框架的分页怎么实现……
——原来REST风格下,通常是"前后端分离"的设计,所以就折腾了会怎么把前后端分离(有"跨域问题")。。
——所以,所以,最后 若是 在后端进行分页, 就是下面这样,
# views.py
# ##############
# DRF的分页实现方式(自定义分页操作类)
# 参考:
# https://www.django-rest-framework.org/api-guide/pagination/
# https://www.sankalpjonna.com/learn-django/pagination-made-easy-with-django-rest-framework
# https://sodocumentation.net/django-rest-framework/topic/9950/pagination
class MyPagination(PageNumberPagination):
""" 自定义的分页操作类 """
page_size = 10
page_size_query_param = 'page_size'
max_page_size = 1000
page_query_param = 'p'
# ordering = '-id'
# http://localhost:8000/note/all?p=2&page_size=3
def get(self, data):
response = Response(data)
response['next'] = self.get_next_link()
response['previous'] = self.get_previous_link()
response['count'] = self.page.paginator.count
return response
# 使用上面自定义的分页操作类
@api_view(['GET',])
def use_MyPagination(request):
# paginator = PageNumberPagination()#默认的分页操作类(见settings.py)
my_pg = MyPagination() # 用 我自定义的分页操作类
query_set = Snippet.objects.all()
context = my_pg.paginate_queryset(query_set, request)
s = SnippetSerializer(context, many=True)
return my_pg.get_paginated_response(s.data)
这基本是第一天的成果:实现了DRF的后端数据分页,给传递了(返回)带有分页信息和数据的JSON。
可是。。前端到底怎么拿到后端的数据,具体怎么展示出来呢?。。
于是我又研究了一下 jQuery,Ajax,Vue 。。。
最后,最后,用 Vue+axios+boostrap,基本实现数据表格的前端呈现(目前没有用后端分页的方式,而是在前端代码里获取全部数据,由Vue实现为数据表格的分页。)。
关键参考:https://codepen.io/bilalo05/pen/oNgrKXo
注:前端利用后端分页信息再进行分页展示,也是可以的,关键是前端如何获取到后端数据,并处理和更新页面。
OK~
页:
[1]