博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django分页器应用
阅读量:6870 次
发布时间:2019-06-26

本文共 3597 字,大约阅读时间需要 11 分钟。

先保存成一个文件

class Pagination(object):    def __init__(self, current_page, all_count, per_page_num=2, pager_count=11):        """        封装分页相关数据        :param current_page: 当前页        :param all_count:    数据库中的数据总条数        :param per_page_num: 每页显示的数据条数        :param pager_count:  最多显示的页码个数        用法:        queryset = model.objects.all()        page_obj = Pagination(current_page,all_count)        page_data = queryset[page_obj.start:page_obj.end]        获取数据用page_data而不再使用原始的queryset        获取前端分页样式用page_obj.page_html        """        try:            current_page = int(current_page)        except Exception as e:            current_page = 1        if current_page < 1:            current_page = 1        self.current_page = current_page        self.all_count = all_count        self.per_page_num = per_page_num        # 总页码        all_pager, tmp = divmod(all_count, per_page_num)        if tmp:            all_pager += 1        self.all_pager = all_pager        self.pager_count = pager_count        self.pager_count_half = int((pager_count - 1) / 2)    @property    def start(self):        return (self.current_page - 1) * self.per_page_num    @property    def end(self):        return self.current_page * self.per_page_num    def page_html(self):        # 如果总页码 < 11个:        if self.all_pager <= self.pager_count:            pager_start = 1            pager_end = self.all_pager + 1        # 总页码  > 11        else:            # 当前页如果<=页面上最多显示11/2个页码            if self.current_page <= self.pager_count_half:                pager_start = 1                pager_end = self.pager_count + 1            # 当前页大于5            else:                # 页码翻到最后                if (self.current_page + self.pager_count_half) > self.all_pager:                    pager_end = self.all_pager + 1                    pager_start = self.all_pager - self.pager_count + 1                else:                    pager_start = self.current_page - self.pager_count_half                    pager_end = self.current_page + self.pager_count_half + 1        page_html_list = []        # 添加前面的nav和ul标签        page_html_list.append('''                    
''') return ''.join(page_html_list)

使用:

后端:

book_list = models.Book2.objects.all()# 数据总条数all_count = book_list.count()# 当前页current_page = request.GET.get('page',1)# 示例一个分页器对象page_obj = my_page.Pagination(current_page=current_page,all_count=all_count)# 对总数据进行切片page_queryset = book_list[page_obj.start:page_obj.end]

前端模板:

{
{ page_obj.page_html|safe }} # 帮你渲染的是带有bootstrap样式的分页器

 

转载于:https://www.cnblogs.com/xufengfan/p/11026058.html

你可能感兴趣的文章
浅谈Android反调试 之 PTRACE_TRACEME
查看>>
C++程设实验项目三:黑白棋与基于UCT算法的AI
查看>>
django博客项目-设置django为中文语言
查看>>
[转] Haproxy、Keepalived双主高可用负载均衡
查看>>
openGL如何在改变窗口大小时,使自己的图形不被拉伸
查看>>
JAVA SSH框架介绍
查看>>
android:descendantFocusability用法简析
查看>>
如何让Android字体自适应屏幕分辨率
查看>>
Android项目的依赖关系
查看>>
优先队列的简单应用
查看>>
工作面板视图
查看>>
你好,世界!
查看>>
个人总结
查看>>
md5加密
查看>>
分享一个另类的代码注释
查看>>
路由规则的传参方式2
查看>>
教辅的组成 最大流
查看>>
[报告]ZJU 3648 Gao the Grid II
查看>>
JavaScript 的 WebAssembly
查看>>
爱上一门语言不需要理由——我的js之路
查看>>