博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django简单博客实战(四)--- 分页实现
阅读量:3923 次
发布时间:2019-05-23

本文共 4763 字,大约阅读时间需要 15 分钟。

Django实现分页

项目地址:https://github.com/ylpxzx/lifeblog

Django自带分页组件实现分页器

  1. 视图函数views.py中配置
from django.shortcuts import render,HttpResponsefrom django.views.generic import Viewfrom .models import Postfrom django.core.paginator import Paginator,EmptyPage,PageNotAnInteger # 添加该行class IndexView(View):    def get(self,request):        post_list = Post.objects.all().order_by("-id")		        # 分页器        paginator = Paginator(post_list,6)        		# print("count:",paginator.count)  # 数据总数        # print("num_pages:",paginator.num_pages) # 总页数        # print("page_range:",paginator.page_range) # 页码列表        #        # page1 = paginator.page(1)  # 第1页的page对象        # for i in page1: # 遍历第1页的所有数据对象        #     print(i)        #        # print("第一页的所有数据:",page1.object_list)  # 第1页的所有数据        #        # page2 = paginator.page(2)        # print(page2.has_next())  # 是否有下一页        # print(page2.next_page_number())  # 下一页的页码        # print(page2.has_previous())  # 是否有上一页        # print(page2.previous_page_number())  # 上一页的页码        page = request.GET.get('page', 1)        currentPage = int(page)        try:            print(page)            post_list = paginator.page(page)        except PageNotAnInteger:            post_list = paginator.page(1)        except EmptyPage:            post_list = paginator.page(paginator.num_pages)        return render(request,"index.html",{
'post_list':post_list,"paginator":paginator,"currentPage":currentPage})
  1. 模板文件中编写分页语句
{% block area %}
{% for post in post_list %}
  • {
    { post }}
  • {% endfor %}
    {% endblock %}
    1. 如果页数十分多时,换另外一种显示方式
    class IndexView(View):    def get(self,request):        post_list = Post.objects.all().order_by("-id")        # 分页器        paginator = Paginator(post_list,6)        # print("count:",paginator.count)  # 数据总数        # print("num_pages:",paginator.num_pages) # 总页数        # print("page_range:",paginator.page_range) # 页码列表        #        # page1 = paginator.page(1)  # 第1页的page对象        # for i in page1: # 遍历第1页的所有数据对象        #     print(i)        #        # print("第一页的所有数据:",page1.object_list)  # 第1页的所有数据        #        # page2 = paginator.page(2)        # print(page2.has_next())  # 是否有下一页        # print(page2.next_page_number())  # 下一页的页码        # print(page2.has_previous())  # 是否有上一页        # print(page2.previous_page_number())  # 上一页的页码        page = request.GET.get('page', 1)        currentPage = int(page)        #  如果页数十分多时,换另外一种显示方式        if paginator.num_pages > 11:            if currentPage - 5 < 1:                pageRange = range(1, 11)            elif currentPage + 5 > paginator.num_pages:                pageRange = range(currentPage - 5, paginator.num_pages + 1)            else:                pageRange = range(currentPage - 5, currentPage + 6)        else:            pageRange = paginator.page_range        try:            print(page)            post_list = paginator.page(page)        except PageNotAnInteger:            post_list = paginator.page(1)        except EmptyPage:            post_list = paginator.page(paginator.num_pages)        return render(request,"index.html",locals())

    Django ListView视图实现分页

    1. 在视图views.py文件中配置paginate_by
    from django.views.generic.list import ListViewfrom .models import Post,Categoryclass IndexView(ListView):    model = Post    template_name = "index.html"    context_object_name = "post_list"    paginate_by = 6    def get_queryset(self):        post_list = Post.objects.all().order_by("-id")        return post_list    def get_context_data(self, *, object_list=None, **kwargs):        kwargs['category_list'] = Category.objects.all().order_by('post_category') # 设置分类字段到模板上下文        content = super(IndexView,self).get_context_data(**kwargs)		print(content) # 检查是否有paginate对象        return content
    1. 模板文件中编写分页语句

    转载地址:http://bgugn.baihongyu.com/

    你可能感兴趣的文章
    C# 9 新特性 —— 补充篇
    查看>>
    Asp.Net Core使用Skywalking实现分布式链路追踪
    查看>>
    浅谈CLR基础知识
    查看>>
    Xamarin使XRPC实现接口/委托远程调用
    查看>>
    如何成功搞垮一个团队?
    查看>>
    .NET开源5年了,这些宝藏你还没get?
    查看>>
    【日常排雷】 .Net core 生产环境appsetting读取失败
    查看>>
    从内存中释放Selenium chromedriver.exe
    查看>>
    如何在 C# 中使用 MSMQ
    查看>>
    小试elsa
    查看>>
    巧用 Lazy 解决.NET Core中的循环依赖关系
    查看>>
    微前端架构在容器平台的应用
    查看>>
    C# 中的 null 包容运算符 “!” —— 概念、由来、用法和注意事项
    查看>>
    仓储模式到底是不是反模式?
    查看>>
    【One by One系列】IdentityServer4(一)OAuth2.0与OpenID Connect 1.0
    查看>>
    为什么人和人的差距这么大?
    查看>>
    ML.NET 推荐引擎中一类矩阵因子分解的缺陷
    查看>>
    微软2020开源回顾:止不住的挨骂,停不下的贡献
    查看>>
    说说 RabbiMQ 的应答模式
    查看>>
    OpenTelemetry - 云原生下可观测性的新标准
    查看>>