django实战(一)--dango自带的分页(极简)
时间:2022-07-23
本文章向大家介绍django实战(一)--dango自带的分页(极简),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
注意,我将templates定义在项目的同级目录下:
在settings.py中配置
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
urls.py
from django.urls import path
from . import views
app_name='person'
urlpatterns=[
path('test/', views.test),
path('test/<int:pn>',views.test,name='test'),
]
views.py
from django.shortcuts import render
from .models import Book
from django.core.paginator import Paginator
def test(request,pn=1):
#获取所有的查询
book_obj=Book.objects.all()
#传给paginator,每页显示两条
paginator=Paginator(book_obj,2)
#pn是显示第几页,默认是第一页
page=paginator.page(pn)
#将page通过context传给前端
context={'page':page}
return render(request,'test/test.html',context=context)
models.py
class Book(models.Model):
id = models.AutoField(primary_key=True)
title = models.CharField(max_length=128,null=False)
def __str__(self):
return "book_title:{}".format(self.title)
tempates/test/test.html
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
li{
float: left;
list-style: none;
margin-left: 5px;
}
</style>
</head>
<body>
<div>
<div style="position: absolute;top: 35%;left: 40%;">
<table border="1">
<thread>
<tr>
<th>id</th>
<th>title</th>
</tr>
</thread>
<tbody>
{% for item in page %}
<tr>
<td width="120px">{{item.id}}</td>
<td width="120px">{{item.title}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<!--底部分页按钮显示-->
<div style="position: absolute;top: 50%;left: 44%"
<nav aria-label="Page navigation">
<div class="pagination">
<ul class="pagination" >
{% if page.has_previous %}
<li><a href="/test/{{page.previous_page_number}}" aria-label="Previous">
<span aria-hidden="true">«</span></a></li>
{% endif %}
{% for num in page.paginator.page_range%}
{%if pindex == page.number%}
<li><a href="">{{ num }}</a></li>
{%else%}
<li><a href="/test/{{num}}">{{ num }}</a></li>
{%endif%}
{% endfor %}
{% if page.has_next %}
<li><a href="{% url 'person:test' page.next_page_number %}" aria-label="Next">
<span aria-hidden="true">»</span></a></li>
{% endif %}
</ul>
</div>
</nav>
</div>
</body>
</html>
最终效果(不要在意css,不大美观,哈哈)
在显示下网页源代码:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
li{
float: left;
list-style: none;
margin-left: 5px;
}
</style>
</head>
<body>
<div>
<div style="position: absolute;top: 35%;left: 40%;">
<table border="1">
<thread>
<tr>
<th>id</th>
<th>title</th>
</tr>
</thread>
<tbody>
<tr>
<td width="120px">3</td>
<td width="120px">java</td>
</tr>
<tr>
<td width="120px">6</td>
<td width="120px">zabbix从入门到精通</td>
</tr>
</tbody>
</table>
</div>
<!--底部分页按钮显示-->
<div style="position: absolute;top: 50%;left: 44%"
<nav aria-label="Page navigation">
<div class="pagination">
<ul class="pagination" >
<li><a href="/test/1" aria-label="Previous">
<span aria-hidden="true">«</span></a></li>
<li><a href="/test/1">1</a></li>
<li><a href="/test/2">2</a></li>
<li><a href="/test/3">3</a></li>
<li><a href="/test/3" aria-label="Next">
<span aria-hidden="true">»</span></a></li>
</ul>
</div>
</nav>
</div>
</body>
</html>
总结:这是实现分页最简单的了,至于美观,可以结合bootstrap来进行美化。
技术总结:最基本的是Paginator里面的一些值(当然此处我并没有去尝试其他的,有兴趣的可以去搜下,也挺简单的)。然后其中的一个就是前端pn值如何通过url传值给后端,注意标蓝的地方。
学习不易,且学且珍惜!!!
- Asp.Net统一前后端提示信息方案
- 人工智能:未来决策制定的机遇与影响
- CaseStudy(showcase)界面篇-导出xaml以及放入Blend的技巧
- [Silverlight动画]转向行为 - 避开行为
- CaseStudy(showcase)界面篇-desing设计界面
- [Silverlight动画]转向行为 - 寻找行为
- 【数字货币】数字黄金
- [Silverlight动画]转向行为 - 转向机车
- [Silverlight动画]转向行为 - 机车
- 微信、小游戏与未来
- [Silverlight动画]转向行为 - 2D向量
- [Silverlight动画]转向行为 - 介绍
- WCF技术剖析之十七:消息(Message)详解(中篇)
- flash游戏引擎整理
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python 面向对象-如何查看类的父类,外部如何获取类的名字
- Python操作excel:用xlwt设置excel单元格背景颜色,给字体加粗。【附】颜色表
- Python+selenium 自动化-获取当前页面的url地址,打开指定的url地址
- PyQt5 技术篇-窗口置顶不生效解决办法,setWindowFlags()设置不生效解决办法
- 使用hooks自动监测git仓库更改并拉取
- 重新部署hexo
- 关于前端哈希加密密码的思考
- PyQt5 技术篇-设置下拉框默认值,获取当前选择的内容
- 杜绝重复-ssh-key
- 修改hexo生成的文件链接及图片资源链接
- PyQt5 技术篇-下拉框绑定监听事件
- curl常用命令
- Python 技术篇-文件操控:删除本地文件、文件夹。判断文件、文件夹是否存在方法
- JavaScript 技术篇-js里直接引用jQuery的方法。不依赖html的引用
- golang-buffalo框架