网络编程
位置:首页>> 网络编程>> Python编程>> Django实现分页功能

Django实现分页功能

作者:_世纪末的魔术师_  发布时间:2023-04-04 11:00:56 

标签:Django,分页功能

Django提供了一个新的类来帮助你管理分页数据,这个类存放在django/core/paginator.py.它可以接收列表、元组或其它可迭代的对象。


class Paginator(object):

def __init__(self, object_list, per_page, orphans=0,
        allow_empty_first_page=True):
   self.object_list = object_list
   self.per_page = int(per_page)
   self.orphans = int(orphans)
   self.allow_empty_first_page = allow_empty_first_page

……

 

基本语法实例


#!/usr/bin/env python
# _*_ coding:utf-8 _*_

import os

from django.core.paginator import Paginator
objects = ['john','paul','george','ringo','lucy','meiry','checy','wind','flow','rain']<br>
p = Paginator(objects,3) # 3条数据为一页,实例化分页对象
print p.count # 10 对象总共10个元素
print p.num_pages # 4 对象可分4页
print p.page_range # xrange(1, 5) 对象页的可迭代范围

page1 = p.page(1) # 取对象的第一分页对象
print page1.object_list # 第一分页对象的元素列表['john', 'paul', 'george']
print page1.number # 第一分页对象的当前页值 1

page2 = p.page(2) # 取对象的第二分页对象
print page2.object_list # 第二分页对象的元素列表 ['ringo', 'lucy', 'meiry']
print page2.number # 第二分页对象的当前页码值 2

print page1.has_previous() # 第一分页对象是否有前一页 False
print page1.has_other_pages() # 第一分页对象是否有其它页 True

print page2.has_previous() # 第二分页对象是否有前一页 True
print page2.has_next() # 第二分页对象是否有下一页 True
print page2.next_page_number() # 第二分页对象下一页码的值 3
print page2.previous_page_number() # 第二分页对象的上一页码值 1
print page2.start_index() # 第二分页对象的元素开始索引 4
print page2.end_index() # 第2分页对象的元素结束索引 6

 官方解释在视图中的应用


from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.shortcuts import render

def listing(request):
 contact_list = Contacts.objects.all()
 paginator = Paginator(contact_list, 25) # Show 25 contacts per page

page = request.GET.get('page')
 try:
   contacts = paginator.page(page)
 except PageNotAnInteger:
   # If page is not an integer, deliver first page.
   contacts = paginator.page(1)
 except EmptyPage:
   # If page is out of range (e.g. 9999), deliver last page of results.
   contacts = paginator.page(paginator.num_pages)

return render(request, 'list.html', {'contacts': contacts})

在template的html模板中的应用


{% for contact in contacts %}
 {# Each "contact" is a Contact model object. #}
 {{ contact.full_name|upper }}<br />
 ...
{% endfor %}

<div class="pagination">
 <span class="step-links">
   {% if contacts.has_previous %}
     <a href="?page={{ contacts.previous_page_number }}">previous</a>
   {% endif %}

<span class="current">
     Page {{ contacts.number }} of {{ contacts.paginator.num_pages }}.
   </span>

{% if contacts.has_next %}
     <a href="?page={{ contacts.next_page_number }}">next</a>
   {% endif %}
 </span>
</div>

举例讲述分页功能的使用目的说明

现要实现如下功能

1、网页上显示分页数据,3条数据为一页

2、有分页导航功能,被选中页高亮显示

3、如果没有上一页或下一页,则不出现箭头导航

4、如果最后一页的数据少于2条,合并到上一页

效果图

图1:

Django实现分页功能

 图2:

Django实现分页功能

 视图定义

Django实现分页功能

  定义templates

 Django实现分页功能

 分页功能优化

目标:

1、在template中的html模板中使用自定义函数

2、不管有多少分页,页面上最多显示5页

 

基础知识

Django的模板语言包含了各种各样的内置标签和过滤器来满足你的应用需求,不过有时候你也会发现你的需要的功能不在内置的功能中,这时候你可以通过Python语言自定义标签和过滤器来扩展模板引擎,然后在你的模板中使用{% load %}来加载使用它们。

在你的app下创建templatetags包,在其下创建python脚本来定义你的标签和过滤器,如:


polls/
 __init__.py
 models.py
 templatetags/
   __init__.py
   poll_extras.py
 views.py

然后在你的模板中使用


{% load poll_extras %}

项目实战

自定义过滤器和标签

Django实现分页功能

在模板中引用

Django实现分页功能

效果图:

Django实现分页功能

https://github.com/kongzhagen/python/tree/master/Django

来源:https://blog.csdn.net/weixin_37773766/article/details/80864658

0
投稿

猜你喜欢

  • 您在访问网站时是否会在有些页面上见到这种功能---您在可以访问此网站的同时,还可以查看您免费邮箱中是否有新邮件。这个功能是不是让您觉得很心动
  • 因此,在我接触那么多种语言当中,asp是最不严格的一种,是对程序员要求最低的一种。 昨天测试了asp.net、php和asp的运行速度比较,
  • 在修改后的 《闲谈 Web 图片服务器》 一文中也提及了"IE 浏览器的连接数问题",这也是个有趣的话题。值得补充记录一
  • 先来看看基本的定义:channel是Go语言中的一个核心类型,可以把它看成管道。并发核心单元通过它就可以发送或者接收数据进行通讯,这在一定程
  • 切换按钮是QPushButton的特殊模式。它是一个具有两种状态的按钮:按压和未按压。我们通过这两种状态之间的切换来修改其它内容。#!/us
  • 如果用户查询时,使用Order BY排序语句指定按员工编号来排序,那么排序后产生的所有记录就是临时数据。对于这些临时数据,Oracle数据库
  • 这是个老话题了,之所以再拿出来说,是因为浏览器一直在进步,以前最好的方法现在不一定是最好的。1 如何进行字符串连接?首先让我们来回顾一下字符
  • SWFObject的使用是非常简单的,只需要包含 swfobject.js这个js文件,然后在DOM中插入一些简单的JS代码,就能嵌入Fla
  • 在讲CSS优先级之前,我们得要了解什么是CSS,CSS是用来做什么的。首先,我们对CSS作一个简单的说明:CSS是层叠样式表(Cascadi
  • 在 MySQL 中,数据库和表对应于那些目录下的目录和文件。因而,操作系统的敏感性决定数据库和表命名的大小写敏感。这就意味着数据库和表名在
  • IE>6 及其它浏览器不在此文论述范围内。img 的 onload 事件,是当图片加载完成之后,就处触发。img.complete 这
  • 系统环境:64位win7企业版python2.7.102016.08.16修改内容:1)read_until()函数是可以设置timeout
  • 上一篇:微软建议的ASP性能优化28条守则(7)技巧 22:尽可能使用 Server.Transfer 代替 Response.Redire
  • 介绍获取协程返回值的四种方式:1、通过ensure_future获取,本质是future对象中的result方2、使用loop自带的crea
  • 加了三个验证漏洞以及四个getshell方法# /usr/bin/env python3# -*- coding: utf-8 -*-# @
  • 指令和程序计算机的硬件系统通常由五大部件构成,包括:运算器、控制器、存储器、输入设备和输出设备。其中,运算器和控制器放在一起就是我们通常所说
  • replace 方法返回根据正则表达式进行文字替换后的字符串的复制。stringObj.replace(rgExp, replaceText
  • 使用PHP开发应用程序,尤其是网站程序,常常需要生成随机密码,如用户注册生成随机密码,用户重置密码也需要生成一个随机的密码。随机密码也就是一
  • 1、卓越亚马逊的首页轮换图片,每刷新一次,都是随机不同的顺序显示,这样的设计解决了对于较多图片轮换而靠后的图片信息很少被看到的问题,这点对于
  • 就我个人经验来讲:除了oracle,没有比HP 客户支持中心更糟糕的体验了。刚买不到一个月的HP MINI笔记本,莫名其妙键盘上的引号键松动
手机版 网络编程 asp之家 www.aspxhome.com