• 第三百八十八节,Django+Xadmin打造上线标准的在线教育平台—网站列表分页


    第三百八十八节,Django+Xadmin打造上线标准的在线教育平台—网站列表分页

    分页可以用一个第三方分页模块django-pure-pagination

    下载地址:https://github.com/jamespacileo/django-pure-pagination#settings

    下载后安装此模块即可

    使用pure-pagination分页配置

    settings.py

    注册分页app

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'app_users',                        # 注册 APP
        'app_courses',
        'app_organization',
        'app_operation',
        'xadmin',                           # 注册xadmin的app
        'crispy_forms',                     # 注册xadmin的依赖app
        'captcha',                          # 注册验证码app
        'pure_pagination',                  # 注册分页app
    ]

    设置分页配置

    # 配置分页
    PAGINATION_SETTINGS = {
        'PAGE_RANGE_DISPLAYED': 10,                 # 总共显示多少个页码
        'MARGIN_PAGES_DISPLAYED': 2,                # 页面过多时间隔个数
    
        'SHOW_FIRST_PAGE_WHEN_INVALID': True,       # 超出页码范围,返回到第一页
    }

    逻辑处理

    注意:

    1,说明,下面红色背景的地方,就是分页模块的功能,是分页模块固定的写法,

    2,只有黄色背景的地方参数我们可以定义的

    3,最后传到html页面的people对象很重要,因为无论是显示数据,还是显示分页导航都循环的这个people

    from django.shortcuts import render, HttpResponse, redirect                                 # 导入django向浏览器返回方法
    from django.views.generic.base import View
    from django.db.models import F,Q
    from pure_pagination import Paginator, EmptyPage, PageNotAnInteger               #导入分页模块的方法
    
    from app_organization.models import CityDict, CourseOrg                       # 数据库表
    
    
    class org_list(View):
        def get(self, request):
            # 城市
            cheng_shi = CityDict.objects.all()
    
            # 课程机构
            ji_gou = CourseOrg.objects.all()                # 获取数据库的所有数据
            ji_gou_shu = ji_gou.count()                     # 统计获取到的数量
    
            # 分页功能
            try:
                page = request.GET.get('page', 1)           # 获取当前页码,如果没有默认1
            except PageNotAnInteger:                        # 如果获取页码出错,默认1
                page = 1
    
            p = Paginator(ji_gou, 1, request=request)       # 执行分页函数,参数1数据库的数据,参数2显示多少条数据,参数3request
    
            people = p.page(page)                           # 返回一个,包含了分页数据和分页导航的对象
    
            return render(request, 'org_list.html', {
                'cheng_shi': cheng_shi,                 # 城市数据
                'people': people,                       # 将分页对象传到html页面
                'ji_gou_shu': ji_gou_shu,               # 机构数量
            })
    
        def post(self, request):
            pass

    html页面

    注意:

    1,说明,下面红色背景的地方,就是分页模块的功能,是分页模块固定的写法,

    2,只有黄色背景的地方参数我们可以定义的

    3,最后传到html页面的people对象很重要,因为无论是显示数据,还是显示分页导航都循环的这个people

    <div class="butler_list company list">
                        <div class="layout">
                            <div class="head">
                                <ul class="tab_header">
                                    <li class="active"><a href="?ct=&city=">全部</a></li>
                                    <li class=""><a href="?sort=students&ct=&city=">学习人数 &#8595;</a></li>
                                    <li class=""><a href="?sort=courses&ct=&city=">课程数 &#8595;</a></li>
                                </ul>
                            </div>
                            {# 循环机构 #}
                            {% for ji in people.object_list %}      {# 分页对象.object_list里面是分页后的数据 #}
                                <dl class="des difdes">
                                <dt>
                                    <a href="org-detail-homepage.html">
                                        <img width="200" height="120" class="scrollLoading"
                                             data-url="{{ MEDIA_URL }}{{ ji.image }}"/>         {# 需要拼接静态资源路径 #}
                                    </a>
                                </dt>
                                <dd>
                                    <div class="clearfix">
                                        <a href="org-detail-homepage.html">
                                            <h1>{{ ji.name }}</h1>
                                            <div class="pic fl">
    
                                                <img src="/static/images/authentication.png"/>
    
                                                <img src="/static/images/gold.png"/>
    
                                            </div>
                                        </a>
                                    </div>
                                    <ul class="cont">
                                        <li class="first"><p class="pic9">课程数:<span>1</span></p>
                                            <p class="c7">学习人数:<span>1000</span></p></li>
                                        <li class="c8" style="padding-left:18px;">北京市海淀区中关村北大街</li>
                                        <li class="pic10" style="padding-left:18px;">经典课程:
    
                                            <a href="/diary/19/">c语言基础入门</a>
    
                                            <a href="/diary/16/">数据库基础</a>
    
                                        </li>
                                    </ul>
                                </dd>
                                <div class="buy start_groupbuy jsShowPerfect2" data-id="22"><br/>联系<br/>服务</div>
                            </dl>
                            {% endfor %}
    
                        </div>
                        <div class="pageturn">
                            <ul class="pagelist">
                                {% if people.has_previous %}                    {# 判断有上一页显示上一页 #}
                                    <li class="long"><a href="?{{ people.previous_page_number.querystring }}">上一页</a></li>
                                {% endif %}
    
                                {% for page in people.pages %}                  {# 循环页码 #}
                                    {% if page %}
                                        {% ifequal page people.number %}        {# 判断当前页码,显示当前页码 #}
                                            <li class="active"><a href="?{{ page.querystring }}">{{ page }}</a></li>
                                        {% else %}                              {# 显示其他页码 #}
                                            <li><a href="?{{ page.querystring }}" class="page">{{ page }}</a></li>
                                        {% endifequal %}
                                    {% else %}
                                        ...
                                    {% endif %}
                                {% endfor %}
    
                                {% if people.has_next %}                         {# 判断有下一页显示下一页 #}
                                    <li class="long"><a href="?{{ people.next_page_number.querystring }}">下一页</a></li>
                                {% endif %}
    
                            </ul>
                        </div>
                    </div>

  • 相关阅读:
    C#实现注册码
    多表链接 Left join
    Repeater 一行显示两列数据
    Repeater一行显示数据库中多行表记录
    HP QC(Quality Center)在Windows 7 IE8 IE9下不能工作解决方案
    Android应用换肤总结
    Lua 第一个应用程序 Hello World
    JNI 技术与 Android 应用
    NSAutoreleasePool' is unavailable: not avail
    1-2基础控件
  • 原文地址:https://www.cnblogs.com/adc8868/p/7535791.html
Copyright © 2020-2023  润新知