0

0

Django自定义分页如何实现?

零下一度

零下一度

发布时间:2017-06-29 15:31:53

|

1436人浏览过

|

来源于php中文网

原创

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

分页功能在每个网站都是必要的,对于分页来说,其实就是根据用户的输入计算出应该显示在页面上的数据在数据库表中的起始位置。

确定分页需求:

1. 每页显示的数据条数
2. 每页显示页号链接数
3. 上一页和下一页
4. 首页和末页

效果图:

首先,利用django内置的分页功能,写分页类

短视频去水印微信小程序
短视频去水印微信小程序

抖猫高清去水印微信小程序,源码为短视频去水印微信小程序全套源码,包含微信小程序端源码,服务端后台源码,支持某音、某手、某书、某站短视频平台去水印,提供全套的源码,实现功能包括:1、小程序登录授权、获取微信头像、获取微信用户2、首页包括:流量主已经对接、去水印连接解析、去水印操作指导、常见问题指引3、常用工具箱:包括视频镜头分割(可自定义时长分割)、智能分割(根据镜头自动分割)、视频混剪、模糊图片高

下载


from django.core.paginator import Paginator, Page  # 导入django分页模块


class PageInfo(object):
 def init(self, current_page, all_count, base_url, per_page=10, show_page=11):
  """

  :param current_page: 当前页
  :param all_count: 总页数
  :param base_url: 模板
  :param per_page: 每页显示数据条数
  :param show_page: 显示链接页个数
  """
  #若url错误,默认显示第一页(错误类型可能为:空页面编号,非整数型页面编号)
  try:
   self.current_page = int(current_page)
  except Exception as e:
   self.current_page = 1
  
  #根据数据库信息条数得出总页数   
  a, b = pmod(all_count, per_page)
  if b:
   a += 1
  self.all_page = a 
  
  self.base_url = base_url
  self.per_page = per_page
  self.show_page = show_page

 #当前页起始数据id
 def start_data(self):  
  return (self.current_page - 1) * self.per_page

 #当前页结束数据id
 def end_data(self):  
  return self.current_page * self.per_page
 
 #动态生成前端html
 def pager(self):
  page_list = []
  half = int((self.show_page - 1)/2)
  #如果:总页数 < show_page,默认显示页数范围为: 1~总页数
  if self.all_page < self.show_page:
   start_page = 1
   end_page = self.all_page + 1
  #如果:总页数 > show_page
  else:
   #如果:current_page - half <= 0,默认显示页数范围为:1~show_page
   if self.current_page <= half:
    start_page = 1
    end_page = self.show_page + 1
   else:
    #如果:current_page + half >总页数,默认显示页数范围为:总页数 - show_page ~ 总页数
    if self.current_page + half > self.all_page:
     end_page = self.all_page + 1
     start_page = end_page - self.show_page
    else:
     start_page = self.current_page - half
     end_page = self.current_page + half + 1

  #首页
  first_page = "
  • 首页
  • " %(self.base_url, 1) page_list.append(first_page) #上一页(若当前页等于第一页,则上一页无链接,否则链接为当前页减1) if self.current_page <= 1: prev_page = "
  • 上一页
  • " else: prev_page = "
  • 上一页
  • " %(self.base_url, self.current_page-1) page_list.append(prev_page) #动态生成中间页数链接 for i in range(start_page, end_page): if i == self.current_page: temp = "
  • %s
  • " %(self.base_url, i, i) else: temp = "
  • %s
  • " % (self.base_url, i, i) page_list.append(temp) #下一页(若当前页等于最后页,则下一页无链接,否则链接为当前页加1) if self.current_page >= self.all_page: next_page = "
  • 下一页
  • " else: next_page = "
  • 下一页
  • " %(self.base_url, self.current_page+1) page_list.append(next_page) #末页(若总页数只有一页,则无末页标签) if self.all_page > 1: last_page = "
  • 末页
  • " % (self.base_url, self.all_page) page_list.append(last_page) return ''.join(page_list)

    然后,在views中写方法(此处写在app01中):


    from utils.pagnition import PageInfo # 从文件中导入上步自定义的分页模块
    
    def custom(request):
     all_count = models.UserInfo.objects.all().count() 
     # 获取要显示数据库的总数据条数
     page_info = PageInfo(request.GET.get('page'), all_count, '/custom.html/',)  
     # 生成分页对象
     user_list = models.UserInfo.objects.all()[page_info.start_data():page_info.end_data()]  
     # 利用分页对象获取当前页显示数据
     return render(request, 'custom.html', {'user_list': user_list, 'page_info': page_info}) 
     # 模板渲染

    然后,在templates目录下写“custom.html"文件:


    
    
    
     
     customers
    {# 引入bootstrap样式#}
     
    
    
    

    customers

    {#当前页显示的数据#}
      {% for row in user_list %}
    • {{ row.name }}
    • {% endfor %}
    {#分页#}

    最后,新增url关系(urls.py):


     from django.conf.urls import url
     from django.contrib import admin
     from app01 import views as app01_views
     
     urlpatterns = [
      url(r'^custom.html/$', app01_views.custom),
     ]

    至此,就完成了利用django的分页功能自定义分页模块,可以应用在不同的业务页面上。

    热门AI工具

    更多
    DeepSeek
    DeepSeek

    幻方量化公司旗下的开源大模型平台

    豆包大模型
    豆包大模型

    字节跳动自主研发的一系列大型语言模型

    通义千问
    通义千问

    阿里巴巴推出的全能AI助手

    腾讯元宝
    腾讯元宝

    腾讯混元平台推出的AI助手

    文心一言
    文心一言

    文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

    讯飞写作
    讯飞写作

    基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

    即梦AI
    即梦AI

    一站式AI创作平台,免费AI图片和视频生成。

    ChatGPT
    ChatGPT

    最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

    相关专题

    更多
    go语言 注释编码
    go语言 注释编码

    本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

    2

    2026.01.31

    go语言 math包
    go语言 math包

    本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

    1

    2026.01.31

    go语言输入函数
    go语言输入函数

    本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

    1

    2026.01.31

    golang 循环遍历
    golang 循环遍历

    本专题整合了golang循环遍历相关教程,阅读专题下面的文章了解更多详细内容。

    0

    2026.01.31

    Golang人工智能合集
    Golang人工智能合集

    本专题整合了Golang人工智能相关内容,阅读专题下面的文章了解更多详细内容。

    1

    2026.01.31

    2026赚钱平台入口大全
    2026赚钱平台入口大全

    2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

    76

    2026.01.31

    高干文在线阅读网站大全
    高干文在线阅读网站大全

    汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

    73

    2026.01.31

    无需付费的漫画app大全
    无需付费的漫画app大全

    想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

    67

    2026.01.31

    漫画免费在线观看地址大全
    漫画免费在线观看地址大全

    想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

    19

    2026.01.31

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    Django 教程
    Django 教程

    共28课时 | 3.7万人学习

    Django DRF 源码解析
    Django DRF 源码解析

    共21课时 | 1.4万人学习

    Django参考手册
    Django参考手册

    共0课时 | 0人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号