长沙市建设厅网站,怎么做网站动态框,网站流量来源查询,个人官方网站怎么建设目录 一、手动分页二、分页器分页 一、手动分页
1、概念
页码#xff1a;很容易理解#xff0c;就是一本书的页码每页数量#xff1a;就是一本书中某一页中的内容#xff08;数据量#xff0c;比如第二页有15行内容#xff09;#xff0c;这 15 就是该页的数据量
每一… 目录 一、手动分页二、分页器分页 一、手动分页
1、概念
页码很容易理解就是一本书的页码每页数量就是一本书中某一页中的内容数据量比如第二页有15行内容这 15 就是该页的数据量
每一页的数据量我们可以自定义比如每页我们要求只显示 10 条数据。
2、功能
比如有数据1, 2, 3, …, 100 假设我们规定 页码page 1 每一页per_page 10 页码page数据范围per_page下标范围切片范围11 ~ 100 ~ 9[ 0 : 10 ]211 ~ 2010 ~ 19[ 10 : 20 ]321 ~ 3020 ~ 39[ 20 : 30 ]…………n……[ (page-1) * per_page : page * per_page ]
3、案例 实现功能根据数据量与我们规定的每页数据量自动创建页码按钮当点击页面对应的页码按钮时跳转到对应的页码数据。 先创建一百多个测试数据 视图 import math
from App.models import *
from django.shortcuts import render, HttpResponsedef paginate(request, page1):# 页码page# 每页数量per_pageper_page 10# 获取数据库PersonModel的所有表数据persons PersonModel.objects.all()# 对获取的表数据切片操作persons persons[(page-1) * per_page:page * per_page]# 总页数total PersonModel.objects.count() # 数据总条数total_page math.ceil(total / per_page) # 总页数即总条数/每页条数math.ceil向上取整即返回大于或等于该数字的最小整数。如果传入的参数已经是整数则返回该整数本身如3.5则返回4即大于3.5的数的最小整数如7则返回7。pages range(1, total_page1) # 为什么要转换一下因为传到模板的数据必须是一个字典且字典的 values 必须是一个序列# 将切片的数据传入模板进行渲染return render(request, paginate.html, {persons:persons, pages: pages})路由 from django.contrib import admin
from django.urls import path
from App.views import *urlpatterns [path(admin/, admin.site.urls),path(add/, add_person),path(del/, del_person),path(update/, update_person),path(get/, get_person),path(paginate/int:page/, paginate, namepaginate),
] 模板 paginate.html !DOCTYPE html
html langen
headmeta charsetUTF-8title手动分页/titlestyleul {list-style: none;padding: 0;}.bts li {float: left;margin: 5px;}hr {clear: both;}/style
/head
bodyh2手动分页功能/h2hrul classbts{% for page in pages %}lia href{% url paginate page %}button{{ page }}/button/a/li{% endfor %}/ulhrul{% for person in persons %}li{{ person.name }} - {{ person.age }}/li{% endfor %}/ul
/body
/html验证 当点击 15 这个页码按钮时就会跳到数据的第 15 页的数据。
二、分页器分页
上面的分页是手动进行的需要我们手动写功能。当然我们也可以使用 Django 中的分页器进行自动分页使用时需导入 Paginator 模块。接下来将使用分页器实现与手动分页功能完全一致的分页方法。
1、视图
import math
from App.models import *
from django.shortcuts import render, HttpResponse
from django.core.paginator import Paginatordef paginate2(request, page1):# 每页数量per_page 10all_date PersonModel.objects.all()# 分页器对象paginator Paginator(all_date, per_page) # 获取所有用户数据并根据每页显示10条用户数据进行分页persons paginator.page(page) # 获取指定page页的数据pages paginator.page_range # 页码范围可进行循环遍历return render(request, paginate2.html, {persons: persons, pages: pages})2、路由
from django.contrib import admin
from django.urls import path
from App.views import *urlpatterns [path(admin/, admin.site.urls),path(add/, add_person),path(del/, del_person),path(update/, update_person),path(get/, get_person),path(paginate/int:page/, paginate, namepaginate),path(paginate2/int:page/, paginate2, namepaginate2),
]3、模板 paginate2.html !DOCTYPE html
html langen
headmeta charsetUTF-8title手动分页/titlestyleul {list-style: none;padding: 0;}.bts li {float: left;margin: 5px;}hr {clear: both;}/style
/head
bodyh2手动分页功能/h2hrul classbts{% for page in pages %}lia href{% url paginate2 page %}button{{ page }}/button/a/li{% endfor %}/ulhrul{% for person in persons %}li{{ person.name }} - {{ person.age }}/li{% endfor %}/ul
/body
/html4、验证 http://127.0.0.1:8000/paginate2/10/ —END