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功能相同,接收请求,进行业务处理,返 ...
随机推荐
- bootstrap4中使用fontawesome5.6.3
先下载fontawesome5.6.3,选择free for web,下载完解压,丢在资源目录下 <form action=""> <div class=&quo ...
- 2019-2020-1 20199325《Linux内核原理与分析》第三周作业
在实验楼当中进行实验3的实践:主要是针对cpu占用分配,使用时间片轮转算法进行分配 在Shell命令当中输入如下代码: $ cd ~/LinuxKernel/linux-3.9.4 $ rm -rf ...
- python学习08排序算法举例
'''''''''排序算法:前提是所有数按照从小到大的顺序排列.1.冒泡算法将第一数与第二个数比较大小,如果第一个数比第二个数大,则沉底(交换位置,使大数在小数后面,这个过程类似于大泡沉底的过程) ' ...
- (第四篇)Linux命令初识之常用系统管理命令
1.hostname [命令作用]用于显示和设置系统的主机名称(但是不会永久保存,重启后会恢复) [命令语法]hostname(选项)(参数) [常用选项] -a:显示主机别名(alias name) ...
- apt 安装 版本
1. 通过apt-get安装指定版本软件 apt-get install package=version 2. 查询指定软件有多少个版本 2.1 通过网站搜索https://packages.ubun ...
- Ubuntu 18.04更换apt-get源
使用apt-get安装时,会很慢,更换了国内的源后,就可以解决这个问题了. 1. 备份sources.list文件 sudo cp /etc/apt/sources.list /etc/apt/sou ...
- 使用IBM Blockchain Platform extension开发你的第一个fabric智能合约
文章目录 安装IBM Blockchain Platform extension for VS Code 创建一个智能合约项目 理解智能合约 打包智能合约 Local Fabric Ops 安装智能合 ...
- springboot docker jenkins 自动化部署并上传镜像
springboot + docker + jenkins自动化部署项目,jenkins.mysql.redis都是docker运行的,并且没有使用虚拟机,就在阿里云服务器(centos7)运行 1. ...
- 【Linux删除问题】Operation not permitted
问题:删除某文件出现cannot remove 'XXX': Operation not permitted 查看问题: 1. lsattr 查看隐藏属性 [root@oldboy oldboy]# ...
- JS代码规范
JS代码规范 空格 二元运算符两侧必须有一个空格,一元运算符与操作对象之间不允许有空格. var a = !arr.length; a++; a = b + c; 复制代码 用作代码块起始的左花括号 ...