Django2 +MySQL8 分页功能
虾米姐
阅读:628
2021-03-31 18:17:14
评论:0
本文转载至:https://www.jianshu.com/p/6682ed701f65
分页类:Paginator
class Paginator(object_list, per_page, orphans=0, allow_empty_first_page=True)
必选参数:
objects_list
: 必须是列表/元组或Django
所生成的QuerySet
对象,或具有count()
或__len __()
方法的其他可切片对象。per_page
: 每页显示多少个数量,是一个整数
可选参数:
orphans
: 默认值为零,无论最后一页剩余多少条数据,都另起一页,否则将剩余的合并到上一页,举例:假如当前分页一共11
页,第11
页的只有两条数据,那么我们定义orphans=2
,则分页总数剩余10
页,最后两条数据合并到第10
页。allow_empty_first_page
: 是否允许第一页为空。 如果为False
同时object_list
为空,则将引发EmptyPage
错误,默认值为True
.
Paginator的方法,2.0版后新增:
Paginator.get_page(number)
方法:返回当前页页码,并具有处理超出页码范围和无效页码的状况,页码不是数字返回第一页,超出返回最后一页。Paginator.page(number)
方法: 返回指定页码的内容,如果给定的页码不存在,则引发InvalidPage。
属性:
Paginator.count
: 所有页面中的对象总数。Paginator.num_pages
: 分页总数Paginator.page_range
: 迭代页码,返回的是一个[1,2,3,4,...]这样的列表。
了解了上边这些之后我们既可以在模板中直接使用Page对象所提供的方法,直接使用!
Page objects对象中的方法及属性:
Page.has_next()
如果有下一页返回True
.Page.has_previous()
如果有上一页返回True
.Page.has_other_pages()
如果同时具有上下页返回True
.Page.next_page_number()
返回下一页的页码.Page.previous_page_number()
返回上一页的页码.Page.start_index()
返回当前页面的第一条数据.Page.end_index()
返回当前页的最后一条数据
属性
Page.object_list
此页上的对象列表。Page.number
此页的基于 1 的页码。Page.paginator
关联的 Paginator 对象。
实例Demo:
views.py
from django.core.paginator import Paginator
from django.shortcuts import render
# 分页查询
def lists(request):
lists = Books.objects.all()
paginator = Paginator(lists, 2, orphans=2, )
pages = paginator.page_range # 生成所有页码
pages_num = paginator.num_pages # 总也数
gd_page = paginator.page(1) # 调用指定页面的内容
page = request.GET.get('page') # 当前页面
contacts = paginator.get_page(page) # 当前页并具有处理超出页码范围的状况,页码不是数字返回第一页,超出返回最后一页
return render(request, 'lists.html', {'contacts': contacts, 'pages': pages, 'pagenums': pages_num, 'gd_page': gd_page})
urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url('lists/', views.lists, name='lists'),
]
项目配置文件settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
# 模板文件存储位置
'DIRS': ['E:/python_workspace/blogsite/template'],
'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',
],
},
},
]
模板文件template/lists.html
{% for contact in contacts %}
<li>{
{ contact.book_name }}</li>
<li>{
{ contact.book_price }}</li>
{% endfor %}
<h1>分页练习</h1>
{% if contacts.has_previous %}
<li>上一页页码:{
{ contacts.previous_page_number }}</li>
<a href="?page={
{ contacts.previous_page_number }}">上一页</a>
{% endif %}
<li>当前页码:{
{ contacts.number }}</li>
{% if contacts.has_next %}
<li>下一页页码:{
{ contacts.next_page_number }}</li>
<a href="?page={
{ contacts.next_page_number }}">下一页</a>
{% endif %}
{
{ contacts.start_index }}
{
{ contacts.end_index }}
<p> 所有页码:</p>
<div class="pagetions">
{% for page in pages %}
{% if page == contacts.number %}
<a class="active" href="?page={
{ page }}">{
{ page }}</a>
{% else %}
<a href="?page={
{ page }}">{
{ page }}</a>
{% endif %}
{% endfor %}
</div>
总页数:{
{ pagenums }}
{% for gd in gd_page %}
<li>{
{ gd }}</li>
{% endfor %}
给定页码:{
{ gd_page }}
项目结构图:
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。