Django中ListView分页技术
Django中分页非常方便,通过Pagination你可以很方便达到分页效果。今天主要说的是基础视图中ListView的分页处理,本质还是依赖与Pagination。
数据模型:models.py
from django.db import modelsfrom django.contrib.auth.models import User# Create your models here.class Msg(models.Model):title = models.CharField(max_length = 30)content = models.TextField()user = models.ForeignKey(User)ip = models.IPAddressField()datetime = models.DateTimeField(auto_now_add = True)click_count = models.IntegerField(default = 0)
views.py
from django.views.generic import ListViewfrom msg_board.models import MsgITEMS_PER_PAGE = 1class MsgList(ListView):model = Msg#数据模型context_object_name = 'msg_list'#模板中变量template_name = 'index.html'#模板文件paginate_by = ITEMS_PER_PAGE#一个页面显示的条目
urls.py
urlpatterns = [ re_path(r'^list/(?P<pk>[0-9]+)$', views.MsgListView.as_view(), ),
]
模板:index.html
<html><head><title>msg_board</title><style type="text/css">table{border:3 solid black; border-collapse:collapse}table th, table td{border:2 solid black}</style></head><body><h3>Message:</h3>{% if msg_list %}<table id = "msgs"><tr><th>Title</th><th>Content</th><th>Author</th><th>Ip</th><th>Time</th><th>Click</th></tr>{%for msg in msg_list %}<tr><td>{{msg.title}}</td><td>{{msg.content}}</td><td>{{msg.user}}</td><td>{{msg.ip}}</td><td>{{msg.datetime}}</td><td>{{msg.click_count}}</td></tr>{% endfor%}</table>{% if is_paginated %}<div class="pagination"><span class="page-links">{% if page_obj.has_previous %}<a href="/mysite?page={{ page_obj.previous_page_number }}">上一页</a>{% endif %}{% if page_obj.has_next %}<a href="/mysite?page={{ page_obj.next_page_number }}">下一页</a>{% endif %}<span class="page-current">第{{ page_obj.number }}页 ,工{{ page_obj.paginator.num_pages }}页。</span></span></div>{%endif%}{% else %}<p>No msgs !!!</p>{% endif %}</body></html>
或者
<html><head><title>msg_board</title><style type="text/css">table{border:3 solid black; border-collapse:collapse}table th, table td{border:2 solid black}</style></head><body><h3>Message:</h3>{% if msg_list %}<table id = "msgs"><tr><th>Title</th><th>Content</th><th>Author</th><th>Ip</th><th>Time</th><th>Click</th></tr>{%for msg in msg_list %}<tr><td>{{msg.title}}</td><td>{{msg.content}}</td><td>{{msg.user}}</td><td>{{msg.ip}}</td><td>{{msg.datetime}}</td><td>{{msg.click_count}}</td></tr>{% endfor%}</table>{% if is_paginated %}<nav aria-label="..."><ul class="pagination justify-content-center">{% if page_obj.has_previous %}<li class="page-item "><a class="page-link" href="{{ request.path }}?page=1" tabindex="-1" aria-label="Previous"><span aria-hidden="true" >«</span><span class="sr-only">Previous</span></a></li>{% else %}<li class="page-item disabled"><a class="page-link" href="{{ request.path }}?page=1" > <span aria-hidden="true">«</span></a></li>{% endif %}{% for i in page_obj.paginator.page_range %}{% if page_obj.number == i %}<li class="page-item active"><a class="page-link" href="{{ request.path }}?age={{ i }}">{{ i }}</a></li>{% else %}<li class="page-item"><a class="page-link" href="{{ request.path }}?page={{ i }}">{{ i }}</a></li>{% endif %}{% endfor %}<li class="page-item"><a class="page-link"> 共{{ page_obj.paginator.num_pages }}页</a></li>{% if page_obj.has_next %}<li class="page-item"><a class="page-link" href="{{ request.path }}?page={{ page_obj.next_page_number }}"><span aria-hidden="true">»</span></a></li>{% else %}<li class="page-item" aria-label="Next"><a class="page-link"> <span aria-hidden="true" >»</span></a><span class="sr-only">Next</span></li>{% endif %}</ul></nav>{%endif%}{% else %}<p>No msgs !!!</p>{% endif %}</body></html>
效果图:
page_obj是分页对像实例,这个名字是ListView默认生成的
page_obj的变量:
page_obj.paginator.page_range:所有分页的number,是一个list
page_obj.number:当前分页的页码
page_obj.paginator.num_pages:总分页数,就是一共有多少页
page_obj的方法:
page_obj.has_previous():判断是否有上一页
page_obj.previous_page_number():返回上一页的number
page_obj.has_next():判断是否有下一页
page_obj.next_page_number():返回下一页的number
Django中ListView分页技术相关推荐
- django中的分页
分页在现在的网站应用中是非常用的,在Django 中要实现分页,是一件很简单的事情.使用Paginator,但是这种方法在小数据量,几百条时,可以使用.一旦数据大起来之后,效率就非常低下了.artic ...
- MVC4中ajax分页技术实例
在这之前一直没有写过碰过MVC,更别说ajax,但是项目需要,只好边学边做了,希望跟我一样的朋友也可以看到文章,希望可以应用的到你们的项目中去.好了废话不多说,现在开始动手吧. 前台页面 Index. ...
- Django中使用ajax技术概述
ajax 1.什么是ajax ajax就是在不刷新整个页面的情况下,去更新局部页面的内容(无刷新技术) 2.ajax有什么优点 最大的一点是页面无刷新,在页面内与服务器通信,给用户的体验非常好. 使用 ...
- Android中ListView分页加载数据
熟悉Android的朋友们都知道,不管是微博客户端还是新闻客户端,都离不开列表组件,可以说列表组件是Android数据展现方面最重要的组件,我们今天就要讲一讲列表组件ListView加载数据的相关内容 ...
- Django中扩展Paginator实现分页
Django中已经实现了很多功能,基本上只要我们需要的功能,都能够找到相应的包.要在Django中实现分页显示,只需要简单地使用Paginator就可以实现了. 首先,需要在应用的views.py中添 ...
- android listview分页显示,Android应用中使用ListView来分页显示刷新的内容
点击按钮刷新1.效果如下: 实例如下: 上图的添加数据按钮可以换成一个进度条 因为没有数据所以我加了一个按钮添加到数据库用于测试:一般在服务器拉去数据需要一定的时间,所以可以弄个进度条来提示用户: ...
- Django中使用Pagination的分页范例源码
将做工程过程重要的内容做个珍藏,下面代码内容是关于Django中使用Pagination的分页范例的代码. from django.core.paginator import Paginator ob ...
- 如何在 Django REST Framework 中对分页结果过滤和排序?
作者 | 大江狗 责编 | 张文 来源 | Python Web 与 Django 开发 (ID:Python_Web_Django) 在本篇文章中我们将向你演示如何在 Django REST Fr ...
- android开发分页查询,Android开发中实现分页效果的简单步骤
分页加载在程序开发中是必备的,但是我们实现这个功能并不仅仅为了美观,用户体验也是很重要的,爱站技术频道下面就带大家了解Android开发中实现分页效果的简单步骤,感兴趣的小伙伴们参考看看吧! 具体内容 ...
- php ajax mysql 分页查询_基于PHP_MySql_Ajax的分页技术方案
一.引言 Ajax的全称是AsynchronousJavaScriptAndXML(异步JavaScript和XML),它不是一项新技术,而是很多成熟的技术的集合. 和Applet,Flash相比,A ...
最新文章
- RAC环境下的备份与恢复(一)
- 2015-05-26
- ThreadPoolExecutor里面4种拒绝策略--CallerRunsPolicy
- Oracle发布Java 8
- Java统计每个大写字母的个数
- 编程语言之问:何时该借用,何时该创造?
- 033-生产机器扩容
- ANTS Memory Profiler - NET内存泄漏分析工具
- tomcat反向代理,监控,性能优化详细步骤
- PS CC2017安装及破解
- Matlab解五次以上方程,大侠帮忙,matlab解方程组 (5个方程,5个未知数)
- springBoot启动类报错
- 夏天最美丽的就应该是荷花了
- HJ107 求解立方根(java详解,二分法详解)
- 关于Unicode字符集,将char数组转化成LPCTSTR
- 矩阵理论| 基础:线性子空间(非平凡子空间)、空间分解、直和分解
- react 项目框架的搭建(一)
- 如何创建 Ping app 中的 UIViewController 转换动画?
- arcgis定义投影报错
- RTL8189ES/ETV/FTV系列模块定频软件操作手册
热门文章
- 四川大学计算机网络实验,四川大学计算机网络实验报告
- JavaScript 操作 session 方法
- 利用向日葵远程控制工具实现远程控制电脑
- OTSU算法(大津法—最大类间方差法)原理及实现
- MP3音频文件转换成caf格式
- 数据库系统概论习题 关系数据库 关系数据库(关系代数表达式)
- c语言----斐波那契数列
- taxi计费器c语言程序,基于单片机的出租车计费器的设计(附实物图,原理图,程序)...
- 用积分法求椭圆周长matlab,MATLAB计算积分
- Java实习日记(5)