首页 后端开发 Python教程 Django介绍之分页实例

Django介绍之分页实例

Jun 27, 2017 am 09:54 AM
django 分页 自定义

 

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

确定分页需求:

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

效果图:

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

 1 from django.core.paginator import Paginator, Page      # 导入django分页模块 2  3  4 class PageInfo(object): 5     def __init__(self, current_page, all_count, base_url, per_page=10, show_page=11): 6         """ 7  8         :param current_page: 当前页 9         :param all_count: 总页数10         :param base_url: 模板11         :param per_page: 每页显示数据条数12         :param show_page: 显示链接页个数13         """14         #若url错误,默认显示第一页(错误类型可能为:空页面编号,非整数型页面编号)15         try:16             self.current_page = int(current_page)17         except Exception as e:18             self.current_page = 119         20         #根据数据库信息条数得出总页数            21         a, b = divmod(all_count, per_page)22         if b:23             a += 124         self.all_page = a   
25         26         self.base_url = base_url27         self.per_page = per_page28         self.show_page = show_page29 30     #当前页起始数据id31     def start_data(self):       
32         return (self.current_page - 1) * self.per_page33 34     #当前页结束数据id35     def end_data(self):     
36         return self.current_page * self.per_page37     38     #动态生成前端html39     def pager(self):40         page_list = []41         half = int((self.show_page - 1)/2)42         #如果:总页数 < show_page,默认显示页数范围为: 1~总页数43         if self.all_page < self.show_page:44             start_page = 145             end_page = self.all_page + 146         #如果:总页数 > show_page47         else:48             #如果:current_page - half <= 0,默认显示页数范围为:1~show_page49             if self.current_page <= half:50                 start_page = 151                 end_page = self.show_page + 152             else:53                 #如果:current_page + half >总页数,默认显示页数范围为:总页数 - show_page ~ 总页数54                 if self.current_page + half > self.all_page:55                     end_page = self.all_page + 156                     start_page = end_page - self.show_page57                 else:58                     start_page = self.current_page - half59                     end_page = self.current_page + half + 160 61         #首页62         first_page = "<li><a href=&#39;%s?page=%s&#39;>首页</a></li>" %(self.base_url, 1)63         page_list.append(first_page)64 65         #上一页(若当前页等于第一页,则上一页无链接,否则链接为当前页减1)66         if self.current_page <= 1:67             prev_page = "<li><a href=&#39;#&#39;>上一页</a></li>"68         else:69             prev_page = "<li><a href=&#39;%s?page=%s&#39;>上一页</a></li>" %(self.base_url, self.current_page-1)70         page_list.append(prev_page)71 72         #动态生成中间页数链接73         for i in range(start_page, end_page):74             if i == self.current_page:75                 temp = "<li class=&#39;active&#39;><a href=&#39;%s?page=%s&#39;>%s</a></li>" %(self.base_url, i, i)76             else:77                 temp = "<li><a href=&#39;%s?page=%s&#39;>%s</a></li>" % (self.base_url, i, i)78             page_list.append(temp)79 80         #下一页(若当前页等于最后页,则下一页无链接,否则链接为当前页加1)81         if self.current_page >= self.all_page:82             next_page = "<li><a href=&#39;#&#39;>下一页</a></li>"83         else:84             next_page = "<li><a href=&#39;%s?page=%s&#39;>下一页</a></li>" %(self.base_url, self.current_page+1)85         page_list.append(next_page)86 87         #末页(若总页数只有一页,则无末页标签)88         if self.all_page > 1:89             last_page = "<li><a href=&#39;%s?page=%s&#39;>末页</a></li>" % (self.base_url, self.all_page)90             page_list.append(last_page)91 92         return ''.join(page_list)
登录后复制

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

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

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

 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4     <meta charset="UTF-8"> 5     <title>customers</title> 6 {#    引入bootstrap样式#} 7     <link rel="stylesheet" href="/static/plugins/bootstrap-3.3.7-dist/css/bootstrap.css?1.1.11"> 8 </head> 9 <body>10 <h1>customers</h1>11 {#当前页显示的数据#}12 <ul>13     {% for row in user_list %}14         <li>{{ row.name }}</li>15     {% endfor %}16 </ul>17 18 {#分页#}19     <nav aria-label="Page navigation">20       <ul class="pagination">21 {#                传入page_info.pager#}22           {{ page_info.pager|safe }}23       </ul>24     </nav>25 26 </body>27 </html>
登录后复制

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

1 from django.conf.urls import url2 from django.contrib import admin3 from app01 import views as app01_views4 5 urlpatterns = [6     url(r'^custom.html/$', app01_views.custom),7 ]
登录后复制

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

 

参考资料:

1. Python之路【第十七篇】:Django【进阶篇 】

以上是Django介绍之分页实例的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1667
14
CakePHP 教程
1426
52
Laravel 教程
1328
25
PHP教程
1273
29
C# 教程
1255
24
如何在Netflix中快速设置自定义头像 如何在Netflix中快速设置自定义头像 Feb 19, 2024 pm 06:33 PM

Netflix上的头像是你流媒体身份的可视化代表。用户可以超越默认的头像来展示自己的个性。继续阅读这篇文章,了解如何在Netflix应用程序中设置自定义个人资料图片。如何在Netflix中快速设置自定义头像在Netflix中,没有内置功能来设置个人资料图片。不过,您可以通过在浏览器上安装Netflix扩展来实现此目的。首先,在浏览器上安装Netflix扩展的自定义个人资料图片。你可以在Chrome商店买到它。安装扩展后,在浏览器上打开Netflix并登录您的帐户。导航至右上角的个人资料,然后单击

Django vs. Flask:Python Web框架的对比分析 Django vs. Flask:Python Web框架的对比分析 Jan 19, 2024 am 08:36 AM

Django和Flask都是PythonWeb框架中的佼佼者,它们都有着自己的优点和适用场景。本文将对这两个框架进行对比分析,并提供具体的代码示例。开发简介Django是一个全功能的Web框架,它的主要目的是为了快速开发复杂的Web应用。Django提供了许多内置的功能,比如ORM(对象关系映射)、表单、认证、管理后台等。这些功能使得Django在处理大型

Eclipse中自定义快捷键设置的方法 Eclipse中自定义快捷键设置的方法 Jan 28, 2024 am 10:01 AM

如何在Eclipse中自定义快捷键设置?作为一名开发人员,在使用Eclipse进行编码时,熟练掌握快捷键是提高效率的关键之一。Eclipse作为一款强大的集成开发环境,不仅提供了许多默认的快捷键,还允许用户根据自己的偏好进行个性化的定制。本文将介绍如何在Eclipse中自定义快捷键设置,并给出具体的代码示例。打开Eclipse首先,打开Eclipse,并进入

Django框架的优点和缺点:您需要知道的一切 Django框架的优点和缺点:您需要知道的一切 Jan 19, 2024 am 09:09 AM

Django是一个完整的开发框架,该框架涵盖了Web开发生命周期的各个方面。目前,这个框架是全球范围内最流行的Web框架之一。如果你打算使用Django来构建自己的Web应用程序,那么你需要了解Django框架的优点和缺点。以下是您需要知道的一切,包括具体代码示例。Django优点:1.快速开发-Djang可以快速开发Web应用程序。它提供了丰富的库和内

edius自定义屏幕布局的操作流程 edius自定义屏幕布局的操作流程 Mar 27, 2024 pm 06:50 PM

1、下图是edius默认的屏幕布局,默认的EDIUS窗口布局是横向版式,因此在单显示器环境中,许多窗口是重叠在一起的,且预览窗口为单窗口模式。2、您可以通过【视图】菜单栏启用【双窗口模式】,使预览窗口同时显示播放窗口和录制窗口。3、您可以通过【视图菜单栏>窗口布局>常规】来恢复默认屏幕布局。另外您还可以自定义适合您的布局方式,并保存为常用屏幕布局:将窗口拖动成适合自己的布局,然后点击【视图>窗口布局>保存当前布局>新建】,在弹出的【保存当前布局】小窗口中输入布局名称,单击确定

如何升级Django版本:步骤和注意事项 如何升级Django版本:步骤和注意事项 Jan 19, 2024 am 10:16 AM

如何升级Django版本:步骤和注意事项,需要具体代码示例引言:Django是一个功能强大的PythonWeb框架,它持续地进行更新和升级,以提供更好的性能和更多的功能。然而,对于使用较旧版本Django的开发者来说,升级Django可能会面临一些挑战。本文将介绍如何升级Django版本的步骤和注意事项,并提供具体的代码示例。一、备份项目文件在升级Djan

Django是前端还是后端?一探究竟! Django是前端还是后端?一探究竟! Jan 19, 2024 am 08:37 AM

Django是一个Python编写的web应用框架,它强调快速开发和干净方法。尽管Django是一个web框架,但是要回答Django是前端还是后端这个问题,需要深入理解前后端的概念。前端是指用户直接和交互的界面,后端是指服务器端的程序,他们通过HTTP协议进行数据的交互。在前端和后端分离的情况下,前后端程序可以独立开发,分别实现业务逻辑和交互效果,数据的交

MyBatis分页插件原理详解 MyBatis分页插件原理详解 Feb 22, 2024 pm 03:42 PM

MyBatis是一个优秀的持久层框架,它支持基于XML和注解的方式操作数据库,简单易用,同时也提供了丰富的插件机制。其中,分页插件是使用频率较高的插件之一。本文将深入探讨MyBatis分页插件的原理,并结合具体的代码示例进行说明。一、分页插件原理MyBatis本身并不提供原生的分页功能,但可以借助插件来实现分页查询。分页插件的原理主要是通过拦截MyBatis

See all articles