Django实现分页功能

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

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

标签:Django,分页功能
0
投稿

猜你喜欢

  • python 中collections的 deque使用详解

    2023-02-07 15:43:14
  • python实现电子词典

    2023-05-14 00:29:01
  • MYSQL定时清除备份数据的具体操作

    2024-01-21 02:47:19
  • 12个对网页设计师非常有用的图片优化工具[译]

    2009-09-22 14:29:00
  • Go程序性能优化及pprof使用方法详解

    2023-08-28 14:04:40
  • 解决keras加入lambda层时shape的问题

    2023-05-19 17:47:29
  • pandas的排序、分组groupby及cumsum累计求和方式

    2023-07-20 07:00:39
  • python编程开发之textwrap文本样式处理技巧

    2022-03-20 18:48:26
  • 举例详解JavaScript中Promise的使用

    2024-06-05 09:58:07
  • Python编程实现数学运算求一元二次方程的实根算法示例

    2023-08-08 05:38:40
  • 开心网让人很不开心

    2009-04-05 15:56:00
  • python绘制随机网络图形示例

    2023-10-03 11:21:38
  • Python脚本暴力破解栅栏密码

    2022-02-09 18:31:11
  • python将天气预报可视化

    2021-01-19 01:37:46
  • 对numpy和pandas中数组的合并和拆分详解

    2021-04-23 22:51:50
  • python+selenium+chromedriver实现爬虫示例代码

    2021-03-05 02:53:23
  • 浅谈怎么给Python添加类型标注

    2023-11-21 05:16:17
  • SQL语句优化方法30例(推荐)

    2024-01-14 21:55:35
  • js 将json字符串转换为json对象的方法解析

    2023-07-22 21:41:49
  • PHP取整函数:ceil,floor,round,intval的区别详细解析

    2023-11-17 18:30:33
  • asp之家 网络编程 m.aspxhome.com