Django分页之应用案例
项目文件:
  
models.py(建表)
from django.db import models
# Create your models here. class Book(models.Model):
title = models.CharField(max_length=32)
price = models.DecimalField(max_digits=5, decimal_places=2)
date = models.DateField()
#执行makemigrations /migrate命令初始化数据库
models.py
test.py(添加数据)
from django.test import TestCase # Create your tests here.
import os
if __name__ == '__main__':
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "fenyetest.settings")
import django
django.setup() from app01 import models
import random
books_obj=[]
for i in range(1,101):
book_obj= models.Book(title=f'书籍{i}',price=random.randint(1,100)+1,date=f'2018-0{random.randint(1,9)}-0{random.randint(1,9)}')
books_obj.append(book_obj)
print(book_obj.__dict__) models.Book.objects.bulk_create(books_obj)
test.py
urls.py(路由分发)
from django.conf.urls import url
from django.contrib import admin
from app01 import views urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^show/', views.show, name='show'),
]
urls.py
views.py(试图函数)
from django.shortcuts import render
from app01 import models
from django.core.paginator import Paginator,EmptyPage, PageNotAnInteger # Create your views here. def show(request):
book_obj = models.Book.objects.all()
paginator = Paginator(book_obj,8)#每页显示8条数据
print(paginator.count)#总数据条数
print(paginator.num_pages)#总页数
print(paginator.page_range)#页数范围 current_page_num=int(request.GET.get('page',1))#通过a标签的GET方式请求,默认显示第一页
book_objs=paginator.page(current_page_num)#获取当前页面的数据
if book_objs.has_previous():#当前页面是否有前一页
print(book_objs.previous_page_number())#当前页面的前一页页码
if book_objs.has_next():#当前页面是否有后一页
print(book_objs.next_page_number())#当前页面的后一页页码 page_range=paginator.page_range
if paginator.num_pages>5:#页码只显示5页,总页数小于5页时,直接全部显示
if current_page_num<3:
page_range=range(1,6)
elif current_page_num+2>paginator.num_pages:
page_range=range(paginator.num_pages-5,paginator.num_pages+1)
else:
page_range=range(current_page_num-2,current_page_num+3) return render(request, 'show.html', {'book_objs': book_objs,'page_range':page_range,'current_page_num':current_page_num})
views.py
templates(模板页面)
show.html
 {% load static %}
 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">
     <title>信息展示</title>
 </head>
 <body>
 <div class="container ">
     <div class="panel panel-primary">
         <div class="panel-heading"><span>图书信息表</span></div>
         <div class="panel-body">
             <div class="row">
                 <div class="col-xs-6 text-left">
                     <a href="">
                         <button type="button" class="btn btn-info" id="insert">新增</button>
                     </a>
                 </div>
                 <div class="col-xs-3 col-xs-offset-3">
                     <div class="input-group">
                         <input type="text" class="form-control" placeholder="Search for...">
                         <span class="input-group-btn">
                                 <button class="btn btn-default" type="button">
                                     <span class="glyphicon glyphicon-search" aria-hidden="true"></span>
                                 </button>
                             </span>
                     </div>
                 </div>
             </div>
         </div>
         <!-- Table -->
         <table class="table table-striped">
             <thead>
             <tr>
                 <th class="text-center">编号</th>
                 <th>书籍名称</th>
                 <th>价格</th>
                 <th>出版日期</th>
             </tr>
             </thead>
 <!-- 数据渲染 -->
             <tbody id="tb">
             {% for book_obj in book_objs %}
                 <tr>
                     <td>{{ forloop.counter }}</td>
                     <td>{{ book_obj.title }}</td>
                     <td>{{ book_obj.price }}</td>
                     <td>{{ book_obj.date|date:'Y-m-d' }}</td>
                 </tr>
             {% endfor %}
             </tbody>
         </table>
 <!-- 页码控制渲染-->
         <nav aria-label="Page navigation" class="pull-right">
             <ul class="pagination">
 <!-- 上一页 -->
                 <li>
                     {% if book_objs.has_previous %}
                         <a href="{% url 'show' %}?page={{ book_objs.previous_page_number }}" aria-label="Previous">
                             <span aria-hidden="true">«</span>
                         </a>
                     {% else %}
                         <a href="{% url 'show' %}?page={{ current_page_num }}" aria-label="Previous" class="disabled">
                             <span aria-hidden="true">«</span>
                         </a>
                     {% endif %}
                 </li>
 <!-- 页码-->
                 {% for page_num in page_range %}
                     <li class="{% if current_page_num == page_num %}active{% endif %}"><a href="{% url 'show' %}?page={{ page_num }}" >{{ page_num }}</a></li>
                 {% endfor %}
 <!-- 下一页 -->
                 <li>
                     {% if book_objs.has_next %}
                         <a href="{% url 'show' %}?page={{ book_objs.next_page_number }}" aria-label="Next">
                             <span aria-hidden="true">»</span>
                         </a>
                     {% else %}
                         <a href="{% url 'show' %}?page={{ current_page_num }}" aria-label="Next" class="disabled">
                             <span aria-hidden="true">»</span>
                         </a>
                     {% endif %}
                 </li>
             </ul>
         </nav>
     </div>
 </div>
 </body>
 <script src="{% static 'jquery-3.4.1.js' %}"></script>
 <script src="{% static 'jquery-cookie-1.4.1.js' %}"></script>
 <script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script>
 </html>
show.html
Django分页之应用案例的更多相关文章
- Django框架(十四)—— Django分页组件
		目录 Django分页组件 一.分页器 二.分页器的使用 三.案例 1.模板层 2.视图层 Django分页组件 一.分页器 数据量大的话,可以分页获取,查看 例如:图书管理中,如果有成千上万本书,要 ... 
- django 分页(2) 使用类 页码显示
		django 分页显示页码 views.py 显示11页码 ) < 起始位置 - 10总页数 else 总页数 > IF 当前页 小于 起始位置 结束页 IF 当前页 大于 IF 如果结束 ... 
- Django 分页功能
		Django 分页功能比较强大,这边是结合官网的内容写的可以参考 https://docs.djangoproject.com/en/1.9/topics/pagination/ 分页命令行练习案列 ... 
- 原生的 django 分页
		原始的 django 分页 # 基本 写法 class Paginator(object): def __init__(self, object_list, per_page, orphans=0, ... 
- django 分页组件
		一.仿django分页功能自己实现 urls.py 1 2 3 4 5 6 7 8 9 from django.conf.urls import url from django.contrib i ... 
- Django分页(二)
		Django分页(二) 要求 .设定每页显示数据条数 # # .用户输入页码(第一页.第二页...) # # .设定显示多少页号 # # .获取当前数据总条数 # # .根据设定显示多少页号和数据总条 ... 
- Django分页(一)
		Django分页(一) 手动实现简单分页 HTML <!DOCTYPE html> <html lang="en"> <head> <me ... 
- django 分页出现 UnorderedObjectListWarning 错误
		django 分页出现此错误: UnorderedObjectListWarning: Pagination may yield inconsistent results with an unorde ... 
- 2019.03.20  mvt,Django分页
		MVT模式 MVT各部分的功能: M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理. V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返 ... 
随机推荐
- php二维数组的排序
			/** * @desc arraySort php二维数组排序 按照指定的key 对数组进行排序 * @param array $arr 将要排序的数组 * @param string $key ... 
- fedora 21下Virtual Box安装Windows XP SP3
			Installing Virtual Box and Windows XP SP3 during Fedora 21 The first step:Download and Install Virtu ... 
- 《Cisco防火墙》一2.4 总结
			本节书摘来自异步社区<Cisco防火墙>一书中的第2章,第2.4节,作者 [巴西]Alexandre M.S.P. Moraes,更多章节内容可以访问云栖社区"异步社区" ... 
- bootstrap-导航(垂直分组)
			1.运行效果如图所示 2.实现代码如下 <!DOCTYPE html> <html> <head> <meta charset="utf-8 ... 
- Java中的集合Queue
			2019独角兽企业重金招聘Python工程师标准>>> package com.zhaogang.test; import org.junit.Test; import java.u ... 
- 通用权限管理系统组件 (GPM - General Permissions Manager)
			有的公司开发人员只那么几个,一个人支撑整个公司所有的IT系统实在有点累,不想自己写权限系统了,自己琢磨不也是要花时间和精力,要为此付出多少时间和汗水阿,细细的皱纹不知要多多少呢,重复建设不是白白浪费生 ... 
- Mac查看与修改系统默认shell
			Mac查看与修改系统默认shell 查看所有shell cat /etc/shells 输出: # List of acceptable shells for chpass(1). # Ftpd wi ... 
- Spring源码学习01:IntelliJ IDEA2019.3编译Spring5.3.x源码
			目录 Spring源码学习01:IntelliJ IDEA2019.3编译Spring5.3.x源码 前言 工欲善其事必先利其器.学习和深读Spring源码一个重要的前提:编译源码到我们的本地环境.这 ... 
- LeetCode 56,57,60,连刷三题不费劲
			本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题的第34篇文章,刚好接下来的题目比较简单,很多和之前的做法类似.所以我们今天出一个合集,一口气做完接下来的57.5 ... 
- Spring Cloud Alibaba系列(一)nacos作为服务注册中心
			Spring Cloud Alibaba各组件版本关系 Spring Cloud Alibaba Version Sentinel Version Nacos Version RocketMQ Ver ... 
