博客
关于我
强烈建议你试试无所不能的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++中头文件相互包含的几点问题
    查看>>
    内存设备描述表
    查看>>
    Latex插入eps图片的方法
    查看>>
    Matlab subplot 图像间距调整
    查看>>
    Hibernate使用count(*)取得表中记录总数
    查看>>
    distinct使SQL查询除去重复的字段
    查看>>
    从mysql中 导出/导入表及数据
    查看>>
    HQL语句大全(转)
    查看>>
    几个常用的Javascript字符串处理函数 spilt(),join(),substring()和indexof()
    查看>>
    javascript传参字符串 与引号的嵌套调用
    查看>>
    进程的状态
    查看>>
    Runnable和Thread 两种实现方式的区别和联系:
    查看>>
    并发和并行的区别
    查看>>
    JAVA多线程和并发基础面试问答
    查看>>
    线程池的介绍及简单实现
    查看>>
    利用session,cookie进行安全性控制
    查看>>
    Session和Cookie的区别及Session的生命周期
    查看>>
    线程池 Thread Pools
    查看>>
    Cannot forward after response has been committed 错误解决
    查看>>
    Linux系统调用--getpid/getppid函数详解
    查看>>