博客
关于我
强烈建议你试试无所不能的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/

    你可能感兴趣的文章
    JVM并发机制探讨—内存模型、内存可见性和指令重排序
    查看>>
    可扩展、高可用服务网络设计方案
    查看>>
    如何构建高扩展性网站
    查看>>
    微服务架构的设计模式
    查看>>
    持续可用与CAP理论 – 一个系统开发者的观点
    查看>>
    nginx+tomcat+memcached (msm)实现 session同步复制
    查看>>
    c++字符数组和字符指针区别以及str***函数
    查看>>
    c++类的操作符重载注意事项
    查看>>
    c++模板与泛型编程
    查看>>
    STL::deque以及由其实现的queue和stack
    查看>>
    WAV文件解析
    查看>>
    DAC输出音乐2-解决pu pu 声
    查看>>
    WPF中PATH使用AI导出SVG的方法
    查看>>
    WPF UI&控件免费开源库
    查看>>
    QT打开项目提示no valid settings file could be found
    查看>>
    Win10+VS+ESP32环境搭建
    查看>>
    Ubuntu+win10远程桌面
    查看>>
    flutter-实现圆角带边框的view(android无效)
    查看>>
    android 代码实现圆角
    查看>>
    flutter-解析json
    查看>>