zoukankan      html  css  js  c++  java
  • Django(二十)分页:

    一、知识点

    参考:https://docs.djangoproject.com/zh-hans/3.0/topics/pagination/

    查询出所有省级地区的信息,显示在页面上。

    AeroInfo.objects.filter(aParent__isnull = True)
    

    1) 查询出所有省级地区的信息。

    2) 按每页显示10条信息进行分页,默认显示第一页的信息,下面并显示出页码。

    3) 点击i页链接的时候,就显示第i页的省级地区信息。

    from django.core.paginator import Paginator
    paginator = Paginator(areas, 10) #按每页10条数据进行分页
    

    Paginator类对象的属性:

    属性名 说明
    num_pages 返回分页之后的总页数
    page_range 返回分页后页码的列表

    Paginator类对象的方法:

    方法名 说明
    page(self, number) 返回第number页的Page类实例对象

    Page类对象的属性:

    属性名 说明
    number 返回当前页的页码
    object_list 返回包含当前页的数据的查询集
    paginator 返回对应的Paginator类对象

    Page类对象的方法:

    属性名 说明
    has_previous 判断当前页是否有前一页
    has_next 判断当前页是否有下一页
    previous_page_number 返回前一页的页码
    next_page_number 返回下一页的页码

    二、分页实例

    1)app1/models.py写地区模型类

    from django.db import models
    
    class AreaInfo(models.Model):
        '''地址模型类'''
        # 地区名称
        atitle = models.CharField(verbose_name='标题', max_length=20)
        # 自关联属性
        aParent = models.ForeignKey('self', null=True, blank=True,on_delete=models.CASCADE)
    
        def __str__(self):
            return self.atitle
    
        def title(self):
            return self.atitle
        title.admin_order_field = 'atitle'
        title.short_description = '地区名称'
    
        def parent(self):
            if self.aParent is None:
                return ''
            return self.aParent.atitle
        parent.short_description = '父级地区名称'
    

    2)app1/views.py写显示函数

    from django.shortcuts import render
    from django.http import HttpResponse
    from app1.models import AreaInfo #导入图片模型类
    
    
    # /index
    def index(request):
    	return render(request,'app1/index.html')
    
    # /show_areas
    # 前端访问的时候,需要传递页码
    from django.core.paginator import Paginator #【0】导入分页模块
    def show_areas(request):
    	'''分页显示地区'''
    	areas=AreaInfo.objects.filter(aParent__isnull=True) #【1】过滤父级为空的地区,即省区
    	paginator=Paginator(areas,10) #【2】把省区进行分页,每页显示10条
    	page=paginator.page(1) #【3】获取第一页试试
    	return render(request,'app1/show_areas.html',{'page':page}) # 【4】返回第一页给模板。传所有区数据'areas':areas
    

    3)模板templates/app1/show_areas.html

    <!DOCTYPE html>
    <html>
    <head>
    	<title>显示地区</title>
    </head>
    <body>
    
    	<ul>
    		{% for a in page %}
    		<li>{{a.atitle}}</li>
    		{% endfor %}
    	</ul>
    
    </body>
    </html>
    

    4)配置urls.py

    from django.contrib import admin
    from django.urls import path
    from app1 import views
    
    urlpatterns = [
        path('index/', views.index),
    
        path('show_upload/',views.show_upload),# 图片上传页
        path('upload_handle/',views.upload_handle),# 图片上传处理页
    
        path('show_areas/',views.show_areas), #显示地区
    ]
    

    5)效果:http://127.0.0.1:8000/show_areas/

    显示第一页十条数据:
    北京市
    天津市
    河北省
    山西省
    内蒙古自治区
    辽宁省
    吉林省
    黑龙江省
    上海市
    江苏省

    2.2完整的分布实例

    1)模板templates/app1/show_areas.html

    <!DOCTYPE html>
    <html>
    <head>
    	<title>显示地区</title>
    </head>
    <body>
    	<ul>
    		{# 遍历获取每一条数据 #}
        {#  {% for area in page.object_list %}#}
        {% for area in page %}
            <li>{{ area.atitle }}</li>
        {% endfor %}
    </ul>
    {# 判断是否有上一页 #}
    {% if page.has_previous %}
        <a href="/show_areas{{ page.previous_page_number }}">&lt;上一页</a>
    {% endif %}
    
    {# 遍历显示页码的链接 #}
    {% for pindex in page.paginator.page_range %}
        {# 判断是否是当前页 #}
        {% if pindex == page.number %}
            {{ pindex }}
        {% else %}
            <a href="/show_areas{{ pindex }}">{{ pindex }}</a>
        {% endif %}
    {% endfor %}
    
    {# 判断是否有下一页 #}
    {% if page.has_next %}
        <a href="/show_areas{{ page.next_page_number }}">下一页&gt;</a>
    {% endif %}
    	</ul>
    
    </body>
    </html>
    

    2)app1/views.py

    from django.shortcuts import render
    from django.http import HttpResponse
    from project1.settings import MEDIA_ROOT #导入上传文件保存路径 或 from django.conf import settings
    from app1.models import PicTest,AreaInfo #导入图片模型类
    
    
    # /index
    def index(request):
    	return render(request,'app1/index.html')
    
    # /show_areas
    # 前端访问的时候,需要传递页码pindex
    from django.core.paginator import Paginator #【0】导入分页模块
    def show_areas(request,pindex):
    	'''分页显示地区'''
    	# 1.查询出所有省级地区的信息
    	areas = AreaInfo.objects.filter(aParent__isnull=True)
    	# 2. 分页,每页显示10条
    	paginator = Paginator(areas, 10)
    
    	# 3. 获取第pindex页的内容
    	if pindex == '':
    	    # 默认取第一页的内容
    	    pindex = 1
    	else:
    	    pindex = int(pindex)
    	# page是Page类的实例对象
    	page = paginator.page(pindex)
    	return render(request,'app1/show_areas.html',{'page':page}) # 【4】返回第一页给模板。
    

    3)配置urls.py

    from django.contrib import admin
    from django.urls import path,re_path
    from app1 import views
    
    urlpatterns = [
        path('index/', views.index),
    
        path('show_upload/',views.show_upload),# 图片上传页
        path('upload_handle/',views.upload_handle),# 图片上传处理页
    
        #path('show_areas/',views.show_areas), #显示地区
    
        re_path(r'show_areas(?P<pindex>d*)', views.show_areas), # 分页
    ]
    
    

    效果:http://127.0.0.1:8000/show_areas

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    (Java) LeetCode 275. H-Index II —— H指数 II
    (Java) LeetCode 82. Remove Duplicates from Sorted List II —— 删除排序链表中的重复元素 II
    前端知识体系目录
    PhoneGap/cordvoa如何添加Media插件
    使用Google Closure Compiler高级压缩Javascript代码注意的几个地方
    javascript中的函数式声明与变量式声明
    call,apply,bind的用法
    canvas学习笔记
    Cookie/Session机制详解
    架构师速成6.8-设计开发思路-领域驱动 分类: 架构师速成 2015-07-30 18:28 15人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/chenxi188/p/12209036.html
Copyright © 2011-2022 走看看