三步实现Django Paginator分页的方法


Posted in Python onJune 11, 2019

Django提供了一个新的类来帮助管理分页数据,这个类存放在django/core/paginator.py.它可以接收列表、元组或其它可迭代的对象。本文将分三步介绍Django Paginator 分页的实现步骤

一、通过模型创建Subject

Django models

from django.db import models 
class Subject(models.Model):   
  """学科""”   
  no = models.AutoField(primary_key=True, verbose_name="编号")   
  name = models.CharField(max_length=31, verbose_name="名称")   
  intro = models.CharField(max_length=511, verbose_name="介绍")   
  def __str__(self):     
    return self.name   
  
  class Meta:     
    db_table = 'tb_subject'     
    verbose_name_plural = "学科"

二、通过view模块,要呈现到前端的数据

Django view 的配置

from django.shortcuts import render
from django.core.paginator import Paginator, InvalidPage, EmptyPage, PageNotAnInteger
from vote.models import Subject
def show_subject(request):
  """查询学科"""
  #查询Subject 表的所有数据
  subjects = Subject.objects.all().order_by("no”)
  #使用Paginator模块对数据分页,一页5条数据
  paginator = Paginator(subjects, 5)
  #使用request.GET.get()函数获取uri中的page参数的数值
  page = request.GET.get('page')
  try:
    #通过获取上面的page参数,查询此page是否为整数并且是否可用
    subject_obj = paginator.page(page)
  except PageNotAnInteger:
    subject_obj = paginator.page(1)
  except (EmptyPage, InvalidPage):
    subject_obj = paginator.page(paginator.num_pages)
  return render(request, "vote/subject.html", {'subject_list': subject_obj})

三、将view中的数据渲染到前端模版上

前端分页代码块:

<div class="pull-right" style="margin-right: 480px;margin-top: 0px”>
        <!— 分页功能-->
        <nav>
          <ul class="pagination”>
            <!— 分页功能前端的方向箭头代码-->
            {% if subject_list.has_previous %}
            <li class="enabled">
              <a href="?page={{ subject_list.previous_page_number }}" rel="external nofollow" aria-label="Previous">
                <span aria-hidden="true">«</span>
              </a>
            </li>
            {% endif %}
            <!— 分页功能显示页码的中间部分代码-->
            {% for page_num in subject_list.paginator.page_range %}
              {% if page_num == subject_list.number %}
                <li class="active">
                  <a href="#" rel="external nofollow" >
                    {{ page_num }}
                    <span class="sr-only">(current)</span>
                  </a>
                </li>
              {% else %}
                <li>
                  <a href="?page={{ page_num }}" rel="external nofollow" >{{ page_num }}
                    <span class="sr-only">(current)</span>
                  </a>
                </li>
              {% endif %}
            {% endfor %}
            <!— 分页功能末端的方向箭头代码-->
            {% if subject_list.has_next %}
            <li class="enabled">
              <a href="?page={{ subject_list.next_page_number }}" rel="external nofollow" aria-label="last">
                <span aria-hidden="true">»</span>
              </a>
            </li>
            {% endif %}
          </ul>
        </nav>
</div>

四、最终显示效果

三步实现Django Paginator分页的方法

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中实现三目运算的方法
Jun 21 Python
详解 Python 与文件对象共事的实例
Sep 11 Python
Django视图和URL配置详解
Jan 31 Python
Python聊天室程序(基础版)
Apr 01 Python
Window 64位下python3.6.2环境搭建图文教程
Sep 19 Python
selenium+python设置爬虫代理IP的方法
Nov 29 Python
python xpath获取页面注释的方法
Jan 14 Python
python 函数中的内置函数及用法详解
Jul 02 Python
Python class的继承方法代码实例
Feb 14 Python
pymysql 插入数据 转义处理方式
Mar 02 Python
python中的对数log函数表示及用法
Dec 09 Python
python3判断IP地址的方法
Mar 04 Python
python-tkinter之按钮的使用,开关方法
Jun 11 #Python
人工神经网络算法知识点总结
Jun 11 #Python
解决django后台样式丢失,css资源加载失败的问题
Jun 11 #Python
python实现合并多个list及合并多个django QuerySet的方法示例
Jun 11 #Python
Python GUI编程 文本弹窗的实例
Jun 11 #Python
Python API 自动化实战详解(纯代码)
Jun 11 #Python
Python-while 计算100以内奇数和的方法
Jun 11 #Python
You might like
PHP环境搭建最新方法
2006/09/05 PHP
ThinkPHP中获取指定日期后工作日的具体日期方法
2018/10/14 PHP
关于Aptana Studio生成自动备份文件的解决办法
2009/12/23 Javascript
JS 去除Array中的null值示例代码
2013/11/20 Javascript
JavaScript及jquey实现多个数组的合并操作
2014/09/06 Javascript
node.js中的fs.fchownSync方法使用说明
2014/12/16 Javascript
js+html5绘制图片到canvas的方法
2015/06/05 Javascript
Javascript中判断对象是否为空
2015/06/10 Javascript
理解javascript闭包
2015/12/15 Javascript
VUEJS实战之构建基础并渲染出列表(1)
2016/06/13 Javascript
Bootstrap CSS组件之面包屑导航(breadcrumb)
2016/12/17 Javascript
JSON与JS对象的区别与对比
2017/03/01 Javascript
完美实现js选项卡切换效果(二)
2017/03/08 Javascript
mongoose中利用populate处理嵌套的方法
2017/05/26 Javascript
JS实现将对象转化为数组的方法分析
2019/01/21 Javascript
nodejs实现获取本地文件夹下图片信息功能示例
2019/06/22 NodeJs
vue router 传参获取不到的解决方式
2019/11/13 Javascript
JS document文档的简单操作完整示例
2020/01/13 Javascript
详解JavaScript作用域 闭包
2020/07/29 Javascript
windows如何把已安装的nodejs高版本降级为低版本(图文教程)
2020/12/14 NodeJs
[00:57]林俊杰助阵DOTA2亚洲邀请赛
2015/01/28 DOTA
python线程锁(thread)学习示例
2013/12/04 Python
Python获取任意xml节点值的方法
2015/05/05 Python
Python实现的求解最大公约数算法示例
2018/05/03 Python
python 梯度法求解函数极值的实例
2019/07/10 Python
Django实现分页显示效果
2019/10/31 Python
在Matplotlib图中插入LaTex公式实例
2020/04/17 Python
python Tornado框架的使用示例
2020/10/19 Python
10个示例带你掌握python中的元组
2020/11/23 Python
如何用css3实现switch组件开关的方法
2018/02/09 HTML / CSS
美国球迷装备的第一来源:FOCO
2020/07/03 全球购物
厂长岗位职责
2014/02/19 职场文书
经典团队口号
2014/06/06 职场文书
2015年发展党员工作总结报告
2015/03/31 职场文书
离婚被告代理词
2015/05/23 职场文书
Win11局域网共享权限在哪里设置? Win11高级共享的设置技巧
2022/04/05 数码科技