微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django如何自定义分页

这篇文章主要为大家详细介绍了Django自定义分页方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Django自定义分页的具体代码,供大家参考,具体内容如下

稳扎稳打版

def book(request): # 从URL取参数(访问的页码) page_num = request.GET.get("page") try: # 将取出的page转换为int类型 page_num = int(page_num) except Exception as e: # 当输入的页码不是正经数字的时候 认返回第一页的数据 page_num = 1 # 数据库总数据是多少条 total_count = models.Book.objects.all().count() # 每一页显示多少条数据 per_page = 10 # 总共需要多少页码来展示 total_page, m = divmod(total_count, per_page) if m: total_page += 1 # 如果输入的页码数超过了最大的页码数,认返回最后一页 if page_num > total_page: page_num = total_page # 定义两个变量从哪里开始到哪里结束 data_start = (page_num - 1) * 10 data_end = page_num * 10 # 页面上总共展示多少页码 max_page = 11 if total_page = total_page: page_end = total_page page_start = total_page - max_page + 1 # 从数据库取值, 并按照起始数据到结束数据展示 all_book = models.Book.objects.all()[data_start:data_end] # 自己拼接分页HTML代码 html_str_list = [] # # 加上首页 html_str_list.append('首页') # 断一下 如果是第一页,就没有上一页 if page_num «') else: # 不是第一页,就加一个上一页标签 html_str_list.append('«'.format(page_num - 1)) for i in range(page_start, page_end + 1): # 如果是当前页就加一个active样式类 if i == page_num: tmp = '{0}'.format(i) else: tmp = '{0}'.format(i) html_str_list.append(tmp) # 判断,如果是最后一页,就没有下一页 if page_num >= total_page: html_str_list.append('»') else: # 不是最后一页, 就加一个下一页标签 html_str_list.append('»'.format(page_num + 1)) # 加上尾页 html_str_list.append('尾页'.format(total_page)) page_html = "".join(html_str_list) return render(request, "book.html", {"all_book":all_book, "page_html":page_html})

book.html

书籍列表

序列号

ID值

书名

时间

{% for book in all_book %}

{{ forloop.counter }}

{{ book.id }}

{{ book.name }}

{{ book.date }}

{% endfor %}

{{ page_html|safe }}

封装保存版

封装保存版

class Page(object): def __init__(self, page_num, total_count, url_prefix, per_page=10, max_page=11): """ :param page_num: 当前页码数 :param total_count: 数据总数 :param url_prefix: a标签href的前缀 :param per_page: 每页显示多少条数据 :param max_page: 页面上最多显示几个页码 """ self.url_prefix = url_prefix self.max_page = max_page # 总共需要多少页码来展示 total_page, m = divmod(total_count, per_page) if m: total_page += 1 self.total_page = total_page try: # 将取出的page转换为int类型 page_num = int(page_num) except Exception as e: # 当输入的页码不是正经数字的时候 认返回第一页的数据 page_num = 1 # 如果输入的页码数超过了最大的页码数,认返回最后一页 if page_num > total_page: page_num = total_page self.page_num = page_num # 定义两个变量保存数据从哪儿取到哪儿 self.data_start = (page_num - 1) * 10 self.data_end = page_num * 10 # 页面上总共展示多少页码 if total_page = total_page: page_end = total_page page_start = total_page - self.max_page + 1 self.page_start = page_start self.page_end = page_end @property def start(self): return self.data_start @property def end(self): return self.data_end def page_html(self): # 自己拼接分页HTML代码 html_str_list = [] # # 加上首页 html_str_list.append('首页'.format(self.url_prefix)) # 断一下 如果是第一页,就没有上一页 if self.page_num «') else: # 不是第一页,就加一个上一页标签 html_str_list.append('«'.format(self.url_prefix, self.page_num - 1)) for i in range(self.page_start, self.page_end + 1): # 如果是当前页就加一个active样式类 if i == self.page_num: tmp = '{1}'.format(self.url_prefix, i) else: tmp = '{1}'.format(self.url_prefix, i) html_str_list.append(tmp) # 判断,如果是最后一页,就没有下一页 if self.page_num >= self.total_page: html_str_list.append('»') else: # 不是最后一页, 就加一个下一页标签 html_str_list.append('»'.format(self.url_prefix, self.page_num + 1)) # 加上尾页 html_str_list.append('尾页'.format(self.url_prefix, self.total_page)) page_html = "".join(html_str_list) return page_html

封装版使用指南

def publisher(request): page_num = request.GET.get("page") total_count = models.Publisher.objects.all().count() # 调用封装的Page类,传入相应的参数 page_obj = Page(page_num, total_count, url_prefix="/publisher/", per_page=10, max_page=11) all_publisher = models.Publisher.objects.all()[page_obj.start:page_obj.end] page_html = page_obj.page_html() return render(request, "publisher.html", {"publisher": all_publisher, "page_html": page_html})

封装版对应的HTML参考

图书列表

序列号

ID值

出版社

时间

{% for pub in publisher %}

{{ forloop.counter }}

{{ pub.id }}

{{ pub.name }}

{{ pub.date }}

{% endfor %}

{{ page_html|safe }}

效果图如下:

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐