使用django制作简单分页效果(自制)
在django网页制作过程中,面对大量的页面数据。为了更好地呈现给用户,就不得不使用分页效果。下面由我自己写的一个简单分页分享给大家。
views.py
from django.shortcuts import render, redirect, reverse
from .models import User, Student
from django.core.paginator import Paginator
def index(request):
if request.method == 'GET':
# 分页器1
paginator = Paginator(Student.objects.all(), 5) # 获取数据,设置显示数量
page = int(request.GET.get('page', 1)) # 获取url参数,默认第一页
students = paginator.page(page) # 处理数据
# # 分页器2
# page = int(request.GET.get('page')) if request.GET.get('page') else 1
# per_page = int(request.GET.get('per_page')) if request.GET.get('per_page') else 5
# start = per_page*(page-1)
# end = per_page*page
# page_info = students[start:end]
total = len(Student.objects.all()) # 获取数据库中所有信息总个数
if total % 5 == 0:
page_total = int(total / 5)
else:
page_total = int(total / 5) + 1 # 获取总页
context = {
'students': students,
'total': total,
'page_total': page_total,
'page': page,
}
return render(request, 'index.html', context=context)
index.html
<nav aria-label="Page navigation">
<ul class="pagination">
{% if page > 1 %}
<li>
<a href="?page={{ page|add:-1 }}" aria-label="Previous">
<span aria-hidden="true">上一页</span>
</a>
</li>
{% else %}
<li>
<span aria-hidden="true">上一页</span>
</li>
{% endif %}
<li><a href="?page=1">首页</a></li>
<li><a href="?page={{ page }}">第{{ page }}页</a></li>
<li><a href="?page={{ page_total }}">尾页</a></li>
{% if page < page_total %}
<li>
<a href="?page={{ page|add:1 }}" aria-label="Next">
<span aria-hidden="true">下一页</span>
</a>
</li>
{% else %}
<li>
<span aria-hidden="true">下一页</span>
</li>
{% endif %}
<li><span>共{{ total }}条</span></li>
<li><span>共{{ page_total }}页</span></li>
</ul>
</nav>
最终效果: