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

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

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

下载后安装此模块即可

使用pure-pagination分页配置

settings.py

注册分页app

  1. INSTALLED_APPS = [
  2. 'django.contrib.admin',
  3. 'django.contrib.auth',
  4. 'django.contrib.contenttypes',
  5. 'django.contrib.sessions',
  6. 'django.contrib.messages',
  7. 'django.contrib.staticfiles',
  8. 'app_users', # 注册 APP
  9. 'app_courses',
  10. 'app_organization',
  11. 'app_operation',
  12. 'xadmin', # 注册xadmin的app
  13. 'crispy_forms', # 注册xadmin的依赖app
  14. 'captcha', # 注册验证码app
  15. 'pure_pagination', # 注册分页app
  16. ]

设置分页配置

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

逻辑处理

注意:

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

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

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

  1. from django.shortcuts import render, HttpResponse, redirect # 导入django向浏览器返回方法
  2. from django.views.generic.base import View
  3. from django.db.models import F,Q
  4. from pure_pagination import Paginator, EmptyPage, PageNotAnInteger               #导入分页模块的方法
  5.  
  6. from app_organization.models import CityDict, CourseOrg # 数据库表
  7.  
  8. class org_list(View):
  9. def get(self, request):
  10. # 城市
  11. cheng_shi = CityDict.objects.all()
  12.  
  13. # 课程机构
  14. ji_gou = CourseOrg.objects.all() # 获取数据库的所有数据
  15. ji_gou_shu = ji_gou.count() # 统计获取到的数量
  16.  
  17. # 分页功能
  18. try:
  19. page = request.GET.get('page', 1) # 获取当前页码,如果没有默认1
  20. except PageNotAnInteger: # 如果获取页码出错,默认1
  21. page = 1
  22.  
  23. p = Paginator(ji_gou, 1, request=request) # 执行分页函数,参数1数据库的数据,参数2显示多少条数据,参数3request
  24.  
  25. people = p.page(page) # 返回一个,包含了分页数据和分页导航的对象
  26.  
  27. return render(request, 'org_list.html', {
  28. 'cheng_shi': cheng_shi, # 城市数据
  29. 'people': people, # 将分页对象传到html页面
  30. 'ji_gou_shu': ji_gou_shu, # 机构数量
  31. })
  32.  
  33. def post(self, request):
  34. pass

html页面

注意:

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

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

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

  1. <div class="butler_list company list">
  2. <div class="layout">
  3. <div class="head">
  4. <ul class="tab_header">
  5. <li class="active"><a href="?ct=&city=">全部</a></li>
  6. <li class=""><a href="?sort=students&ct=&city=">学习人数 ↓</a></li>
  7. <li class=""><a href="?sort=courses&ct=&city=">课程数 ↓</a></li>
  8. </ul>
  9. </div>
  10. {# 循环机构 #}
  11. {% for ji in people.object_list %} {# 分页对象.object_list里面是分页后的数据 #}
  12. <dl class="des difdes">
  13. <dt>
  14. <a href="org-detail-homepage.html">
  15. <img width="200" height="120" class="scrollLoading"
  16. data-url="{{ MEDIA_URL }}{{ ji.image }}"/> {# 需要拼接静态资源路径 #}
  17. </a>
  18. </dt>
  19. <dd>
  20. <div class="clearfix">
  21. <a href="org-detail-homepage.html">
  22. <h1>{{ ji.name }}</h1>
  23. <div class="pic fl">
  24.  
  25. <img src="/static/images/authentication.png"/>
  26.  
  27. <img src="/static/images/gold.png"/>
  28.  
  29. </div>
  30. </a>
  31. </div>
  32. <ul class="cont">
  33. <li class="first"><p class="pic9">课程数:<span>1</span></p>
  34. <p class="c7">学习人数:<span>1000</span></p></li>
  35. <li class="c8" style="padding-left:18px;">北京市海淀区中关村北大街</li>
  36. <li class="pic10" style="padding-left:18px;">经典课程:
  37.  
  38. <a href="/diary/19/">c语言基础入门</a>
  39.  
  40. <a href="/diary/16/">数据库基础</a>
  41.  
  42. </li>
  43. </ul>
  44. </dd>
  45. <div class="buy start_groupbuy jsShowPerfect2" data-id="22"><br/>联系<br/>服务</div>
  46. </dl>
  47. {% endfor %}
  48.  
  49. </div>
  50. <div class="pageturn">
  51. <ul class="pagelist">
  52. {% if people.has_previous %} {# 判断有上一页显示上一页 #}
  53. <li class="long"><a href="?{{ people.previous_page_number.querystring }}">上一页</a></li>
  54. {% endif %}
  55.  
  56. {% for page in people.pages %} {# 循环页码 #}
  57. {% if page %}
  58. {% ifequal page people.number %} {# 判断当前页码,显示当前页码 #}
  59. <li class="active"><a href="?{{ page.querystring }}">{{ page }}</a></li>
  60. {% else %} {# 显示其他页码 #}
  61. <li><a href="?{{ page.querystring }}" class="page">{{ page }}</a></li>
  62. {% endifequal %}
  63. {% else %}
  64. ...
  65. {% endif %}
  66. {% endfor %}
  67.  
  68. {% if people.has_next %} {# 判断有下一页显示下一页 #}
  69. <li class="long"><a href="?{{ people.next_page_number.querystring }}">下一页</a></li>
  70. {% endif %}
  71.  
  72. </ul>
  73. </div>
  74. </div>

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

  1. 第三百八十二节,Django+Xadmin打造上线标准的在线教育平台—xadmin管理员详情页面布局,导航图标设置

    第三百八十二节,Django+Xadmin打造上线标准的在线教育平台—xadmin进阶 1.后台管理员详情页面布局 后台管理员详情页面,区块是可以拖动的,而且分为了很多个区块 这个页面的布局在xadm ...

  2. 第三百九十三节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置

    第三百九十三节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置 设置后台某个字段的排序规则 在当前APP里的adminx.py文件里的数据表管理器里设置 order ...

  3. 第三百九十二节,Django+Xadmin打造上线标准的在线教育平台—sql注入攻击,xss攻击,csrf攻击

    第三百九十二节,Django+Xadmin打造上线标准的在线教育平台—sql注入攻击,xss攻击,csrf攻击 sql注入攻击 也就是黑客通过表单提交的地方,在表单里输入了sql语句,就是通过SQL语 ...

  4. 第三百九十节,Django+Xadmin打造上线标准的在线教育平台—Django+cropper插件头像裁剪上传

    第三百九十节,Django+Xadmin打造上线标准的在线教育平台—Django+cropper插件头像裁剪上传 实现原理 前台用cropper插件,将用户上传头像时裁剪图片的坐标和图片,传到逻辑处理 ...

  5. 第三百八十七节,Django+Xadmin打造上线标准的在线教育平台—网站上传资源的配置与显示

    第三百八十七节,Django+Xadmin打造上线标准的在线教育平台—网站上传资源的配置与显示 首先了解一下static静态文件与上传资源的区别,static静态文件里面一般防止的我们网站样式的文件, ...

  6. 第三百八十九节,Django+Xadmin打造上线标准的在线教育平台—列表筛选结合分页

    第三百八十九节,Django+Xadmin打造上线标准的在线教育平台—列表筛选结合分页 根据用户的筛选条件来结合分页 实现原理就是,当用户点击一个筛选条件时,通过get请求方式传参将筛选的id或者值, ...

  7. 第三百八十六节,Django+Xadmin打造上线标准的在线教育平台—HTML母版继承

    第三百八十六节,Django+Xadmin打造上线标准的在线教育平台—HTML母版继承 母板-子板-母板继承 母板继承就是访问的页面继承一个母板,将访问页面的内容引入到母板里指定的地方,组合成一个新页 ...

  8. 第三百八十五节,Django+Xadmin打造上线标准的在线教育平台—登录功能实现,回填数据以及错误提示html

    第三百八十五节,Django+Xadmin打造上线标准的在线教育平台—登录功能实现 1,配置登录路由 from django.conf.urls import url, include # 导入dja ...

  9. 第三百八十四节,Django+Xadmin打造上线标准的在线教育平台—路由映射与静态文件配置以及会员注册

    第三百八十四节,Django+Xadmin打造上线标准的在线教育平台—路由映射与静态文件配置以及会员注册 基于类的路由映射 from django.conf.urls import url, incl ...

随机推荐

  1. [Windows Azure] How to use the Queue Storage Service

    How to use the Queue Storage Service version 1.7 version 2.0 This guide will show you how to perform ...

  2. play with variadic template

    我曾在公司内部的一次技术培训课程中讲到如何展开可变模板参数的问题,具体来说是如何打印可变模板参数,我初略数了一下,有很多种,下面来看看到底有多少种不同的方法展开可变模板参数吧. //展开变参的N种方法 ...

  3. [MyBean说明书]-如何进行最简单的DEMO

    MyBean是轻量级的.绿色的框架,不需要安装任何的组件和携带任何的其他文件,前 期步骤已经相当精简了,仔细阅读完下面简单的五个步骤,就可以编写基于MyBean的插件: 1.加入Delphi的搜索路径 ...

  4. 数据库表名最大长度(Oracle=30;SqlServer=128;)

    1.Oracle 数据库 (支持30个字符) --30个字符 CREATE TABLE Tab_Test1234567890abcdefghijkl( ts int ); --select * fro ...

  5. 【JDK】各个版本垃圾收集器

    G1收集器(Garbage First)是Java虚拟机中垃圾收集器的一种. G1收集器是Java虚拟机的垃圾收集器理论进一步发展的产物,它与前面的CMS收集器相比有两个显著的改进:一是G1收集器是基 ...

  6. django模型相关的知识点

    定义属性 概述: django根据属性的类型确定以下信息 当前选择的数据库支持字段的类型 渲染管理表单时使用的默认html控件 在管理站点最低限度的验证 django会为表增加自动增长的主键列,每个模 ...

  7. 结合order by 解CTF某题

    真tmd不容易 <?php error_reporting(0); if (!isset($_POST['uname']) || !isset($_POST['pwd'])) { echo '& ...

  8. VMWare: eth0: error fetching interface information : device not found

    VMWare: eth0: error fetching interface information : device not found  今天在VMware上新搭建的Redhat Linux 64 ...

  9. [转]关于oracle with as用法

    原文地址:https://www.cnblogs.com/linjiqin/archive/2013/06/24/3152667.html with as语法–针对一个别名with tmp as (s ...

  10. MySQL Master_Slave主从配置

    一.配置主数据库master 1.在主库Master创建用户. mysql>create user repl; //创建新用户 //repl用户必须具有REPLICATION SLAVE权限,除 ...