在次申明,之所以重做这个资料是因为原幕课教程漏洞太多,新手根本没有办法正常照些学习,我凭着老男孩python 课程基础,重做这个教程 ,更改版本为当前最新版本,为了方法以后的人学习,并不是照着原文照 抄,

,每一步案例都是亲自测行,能正常运行后在搬在这儿的,

先从分页说起:

进入虚拟目录  workon XXXX

安装分页组件:

  1. pip install django-pure-pagination

    配置环境
  1. INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'users',
    'courses',
    'organization',
    'operation',
    'xadmin',
    'crispy_forms',
    'reversion',
    'captcha',
    'pure_pagination',// 这一项是分页

  1. 在此之前,先看一下官文示例:
  1. # views.py
  2. from django.shortcuts import render_to_response
  3.  
  4. from pure_pagination import Paginator, EmptyPage, PageNotAnInteger
  5.  
  6. def index(request):
  7. # 尝试获取页数参数
  8. try:
  9. page = request.GET.get('page', 1)
  10. except PageNotAnInteger:
  11. page = 1
  12. # objects是取到的数据
  13. objects = ['john', 'edward', 'josh', 'frank']
  14.  
  15. # 对取到的数据进行分页
  16. p = Paginator(objects, request=request)
  17. # 此时前台显示的就是我们此前获取的第几页的数据
  18. people = p.page(page)
  19.  
  20. return render_to_response('index.html', {
  21. 'people': people,
  22. }
  1. 总结,核心配置共总三步,第一步,得到数据,第二步 加入函数,第三步,转换成变量交给前端:
    以本文为例子,完整代码:
  1. # views.py
  2. from django.shortcuts import render_to_response
  3.  
  4. from pure_pagination import Paginator, EmptyPage, PageNotAnInteger
  5.  
  6. class OrgView(View):
  7. def get(self, request):
  8. # 查找所有的城市信息
  9. all_citys = CityDict.objects.all()
  10. # 查找所有的课程机构信息
  11. all_orgs = CourseOrg.objects.all()
  12. # 统计课程机构的数量
  13. org_nums = all_orgs.count()
  14. # 对课程机构进行分页,尝试获取前端get请求传递过来的page参数
  15. # 如果是不合法的配置参数则默认返回第一页
  16. try:
  17. page = request.GET.get('page', 1)
  18. except PageNotAnInteger:
  19. page = 1
  20. # 这里指从all_org中取五个出来,每页显示6个,这个字段必填
  21. p = Paginator(all_orgs, 6, request=request)
  22.  
  23. orgs = p.page(page)
  24.  
  25. return render(request, "org-list.html", {
  26. "all_citys": all_citys,
  27. "all_orgs": orgs,
  28. "org_nums": org_nums,
  29. })
  1. 然后前端就可以使用它自动放生的很多变量,需要注意这不是qert类型 不能用传统遍历,现在可以使用它生成的变量来操作分页上一页,当前页,,,
  1. <div class="pagination">
  2. {% if page_obj.has_previous %}
  3. <a href="?{{ page_obj.previous_page_number.querystring }}" class="prev">&lsaquo;&lsaquo; {% trans "previous" %}</a>
  4. {% else %}
  5. <span class="disabled prev">&lsaquo;&lsaquo; {% trans "previous" %}</span>
  6. {% endif %}
  7. {% for page in page_obj.pages %}
  8. {% if page %}
  9. {% ifequal page page_obj.number %}
  10. <span class="current page">{{ page }}</span>
  11. {% else %}
  12. <a href="?{{ page.querystring }}" class="page">{{ page }}</a>
  13. {% endifequal %}
  14. {% else %}
  15. ...
  16. {% endif %}
  17. {% endfor %}
  18. {% if page_obj.has_next %}
  19. <a href="?{{ page_obj.next_page_number.querystring }}" class="next">{% trans "next" %} &rsaquo;&rsaquo;</a>
  20. {% else %}
  21. <span class="disabled next">{% trans "next" %} &rsaquo;&rsaquo;</span>
  22. {% endif %}
  23. </div>

技术点二   静态路由关联模板

  1. 数据库的图片地址路由:
    比如数据库存的是 org/07-06 这是一个相对地址,我们如何设置一个新的地址来配置默认为入一个XXXX的文件 使访问时 www://1270.0.0:8000/xxx/org/07/06就能访问到,首先要配一个新的url地址来区配

  1. from django.views.static import serve
    from senian.settings import MEDIA_ROOT
  1. re_path('media/(?P<path>.*)',serve, {"document_root": MEDIA_ROOT}),

    然后在配置文件配好路由静态:文件最后加上:

  1. MEDIA_URL='/media/'
    MEDIA_ROOT = os.path.join(BASE_DIR,'media')

    还在是模板加入渲染配置:

  1. TEMPLATES = [
    {
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [os.path.join(BASE_DIR, 'templates')]
    ,
    'APP_DIRS': True,
    'OPTIONS': {
    'context_processors': [
    'django.template.context_processors.debug',
    'django.template.context_processors.request',
    'django.contrib.auth.context_processors.auth',
    'django.contrib.messages.context_processors.messages',
    'django.template.context_processors.media',
    'django.template.context_processors.media',

    ],
    },
    },
    ]

  1. 如此也来,前端便可以使用示例:
  1. {% for course_org in all_orgs.object_list %}

    <dl class="des difdes">
    <dt>
    <a href="org-detail-homepage.html">
    <img width="200" height="120" class="scrollLoading" data-url="{{ MEDIA_URL }}{{ course_org.image }}"/>
    </a>
    </dt>
    <dd>
    注解:为什么data-url 这个属性,基实这是一个js 需要属性,这儿图片ajax 生成的,。。。。

    技术点三 内容筛选和关联查询
    前端中使用
  1. ?city={{ city.id }} 向服务器传入参数

  1. <div class="cont">
    <a href="?ct="><span class="active2">全部</span></a>
    {% for city in all_citys %}
    <a href="?city={{ city.id }}"><span class="">{{ city.name }}</span></a>

    {% endfor %}
    服务器接收后:
    先得到id ,查询 返回时带上 id

  1. all_orgs = CourseOrg.objects.all()
    if city_id:
    all_orgs = all_orgs.filter(city_id=int(city_id))

    筛好了,但是选中正在筛选好的样子没有出来,我们需要把当前ID 参数那个对比一下,如果是当前页,将样式设为选 中状态,所以得先向前端传入选 Id

    中间略过很多代码、、、
  1. return render(request, "org-list.html", {
    "all_citys": all_citys,
    "all_orgs": orgs,
    "xall_orgs":all_orgs,
    "org_nums": org_nums,
    'city_id':city_id,
    })
    前端代码如下:请细看:

  1. <h2>所在地区</h2>
    <div class="more">更多</div>
    <div class="cont">
  1. <a href="?ct="><span class="{% ifequal city_id '' %}active2"{% endifequal %}>全部</span></a>
  1. {% for city in all_citys %}
    <a href="?city={{ city.id }}"><span class="{% ifequal city_id city.id|stringformat:"i" %}active2{% endifequal %}">{{ city.name }}</span></a>

    {% endfor %}

    技术点四 路由分发:

    url 太多的时候需要分在另一个app 处理,可以在主url 配置 分发“
  1. path("org/", include('organization.urls',namespace="org")),

    然后在次app下配置:红色部份为重点

  1. from django.urls import path, include,re_path
    from .views import OrgView

    urlpatterns = [
    path("list/", OrgView.as_view(),name = "org_list"),

    ]
    app_name = "organization"

  1. 前端引用网址为:
  1. <li class="active" ><a href="{% url 'org:org_list' %}">授课机构</a></li>














djang2.1教育平台02的更多相关文章

  1. 基于Moodle的IT课程辅助教育平台搭建

    基于Moodle的IT课程辅助教育平台搭建 Moodle是一个开源课程管理系统(CMS),也被称为学习管理系统(LMS)或虚拟学习环境(VLE).它已成为深受世界各地教育工作者喜爱的一种为学生建立网上 ...

  2. 在线教育平台搭建 预览和models

    一.前言 1.1.项目介绍 在线演示地址:mxonline.mtianyan.cn 开发环境: python:3.6.4 Django:2.0.2 后台管理:xadmin 系统概括: 系统具有完整的用 ...

  3. Django+xadmin打造在线教育平台(二)

    三.xadmin后台管理 3.1.xadmin的安装 django2.0的安装(源码安装方式): https://github.com/sshwsfc/xadmin/tree/django2 把zip ...

  4. Django+xadmin打造在线教育平台(三)

    五.完成注册.找回密码和激活验证码功能 5.1.用户注册 register.html拷贝到templates目录 (1)users/views.py class RegisterView(View): ...

  5. Django+xadmin打造在线教育平台(四)

    七.授课机构功能 7.1.模板继承 (1)创建母板 把org-list.html拷贝到templates目录下,新建base.html,剪切org-list.html内容到里面 再修改一下静态文件的地 ...

  6. Django+xadmin打造在线教育平台(六)

    九.课程章节信息 9.1.模板和urls 拷贝course-comments.html 和 course-video.html放入 templates目录下 先改course-video.html,同 ...

  7. Django+xadmin打造在线教育平台(七)

    十.授课教师 10.1.讲师列表页 拷贝teacher-list.html和teacher-detail.html到templates目录下 先改teacher-list.html,同样继承base. ...

  8. Django+xadmin打造在线教育平台(八)

    十一.用户信息 11.1.个人信息展示 (1)新建‘usercenter-bae.html’当母板 {% load staticfiles %} <!DOCTYPE html> <h ...

  9. Django+xadmin打造在线教育平台(十)

    十四.xadmin的进阶开发 14.1.权限管理 (1)用户权限 超级用户拥有所有权限,其它添加的用户默认没有任何权限 进后台添加一个用户“Editor1”,勾上“职员状态”后,这个用户才可以登录进后 ...

随机推荐

  1. 通过Appium日志,分析其运行原理

    1.启动appium: appium的rest http 接口开始监听 4723 端口: 2.运行 python 脚本: appium接收到一个post请求 /wd/hub/session,并携带了 ...

  2. [C++]-map和unordered_map

    转自:https://blog.csdn.net/BillCYJ/article/details/78985895 头文件不同 map: #include < map > unordere ...

  3. Spring Cloud Aliaba - Ribbon

    Ribbon(有关介绍见RestTemplate末尾) Ribbon负载均衡实现策略 Ribbon负载均衡实现策略通过接口IRule进行实现,默认使用ZoneAvoidanceRule规则进行负载均衡 ...

  4. [数据结构-平衡树]普通 FHQ_Treap从入门到精通(注释比代码多系列)

    普通 FHQ_Treap从入门到精通(注释比代码多系列) 前提说明,作者写注释太累了,文章里的部分讲解来源于Oi-wiki,并根据代码,有部分增改.本文仅仅发布于博客园,其他地方出现本文,均是未经许可 ...

  5. Access, Modify, Change Time of Linux File

    All these 3 time can be viewed by "stat " command. Access time is influenced by read opera ...

  6. 用expect做自动运行脚本

    下面的脚本演示了在Ubuntu上安装expect,写一个切换用户的expect脚本,并运行脚本看到效果的过程. root@guserver:~# apt-get install expect godu ...

  7. 玩转Java8日期工具类-基础

    内容基于的是 Java8官方文档,以及Java时间类总结 的总结.BTW:其实具体方法的使用直接在IDEA中看源码更方便直接. 1.老一辈:Java.util.Date Java.sql.Date J ...

  8. SQL 练习31

    查询任何一门课程成绩在 70 分以上的姓名.课程名称和分数 SELECT Sname,cname,Course.CId,SC.score from Student,Course,sc WHERE St ...

  9. java 的内存结构

    Java内存结构详解 Java把内存分成:栈内存,堆内存,方法区,本地方法区和寄存器等. 下面分别介绍栈内存,堆内存,方法区各自一些特性: 1.栈内存 (1)一些基本类型的变量和对象的引用变量都是在函 ...

  10. QPointer的使用以及场景

    QPointer的使用以及场景 在我们项目开发中,经常会遇到这种情况,在A中引用了B的对象,但是你却不知道B什么时候会析构,所以使用它会出现异常:所以今天的主角要登场了QPointer可以完美的解决这 ...