django自带的分页功能
django中自带的分页功能有缺陷,但是也是一种思路,所以在下做一个整理,方便以后使用,还有服务各位小伙伴.
-
django视图部分的代码.(注释才是重点)
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
class Usersinfo(View):
def get(self, request):
result = UserInfo.objects.all()
# 获取当前的页码:
current_page = request.GET.get('page')
paginator = Paginator(result, 10)
# 当前在前端显示的页码
try:
posts = paginator.page(current_page)
# 含有属性:
# per_page:每页显示条数
# count数据总数
# num_pages:总页数
# page_range:总页数索引范围
# page:page对象
# 如果输入的页面不是整数,就返回到第一页
except PageNotAnInteger as e:
posts = paginator.page(1)
#如果输入的页码数负数,则显示到最后一页
except EmptyPage as e:
posts= paginator.page(paginator.num_pages)
# has_next 是否有下一页
# next_page_number 下一页页码
# has_previous 是否有上一页
# previous_page_number 上一页页码
# object_list 分页之后的数据列表
# number 当前页
# paginator paginator对象
return render(request, 'user.html', {'posts': posts})
-
url配置部分的代码:
urlpatterns = [
path('student/',views.Usersinfo.as_view())
]
前端部分的代码:
<body>
{% for row in posts.object_list %}
<li>{{ row.name }}-----{{ row.age }}</li>
{% endfor %}
<div>
<span>
#如果有下一页,点击下一页时就会翻页
{% if posts.has_previous %}
<a href="?page={{ posts.previous_page_number }}">上一页</a>
{% endif %}
</span>
<span>
Page {{ posts.number }} of {{ posts.paginator.num_pages }}.
</span>
<span>
{% if posts.has_next %}
<a href="?page={{ posts.next_page_number }}">下一页</a>
{% endif %}
</span>
</div>
</body>
希望可以帮到各位!!!