django+xadmin在线教育平台(十五)

7-4 课程机构列表页数据展示2

前去html中进行数据填充

mark

可以看到所有城市是通过a标签,当前选中城市为active。

mark

之后把下面的写死的城市删除掉。

mark

这时就是我们在后台添加的数据了

mark

可以看到每个课程机构都是一个dl

同理使用for循环。

如何将imageField转换为图片地址

数据库中img存放的是字符串:相对路径

mark

mark

上图这种取法会取出一个相对地址。

mark

将setting中配置的mediaurl放在前面可以补全地址。

设置media处理器

mark

mark

注册之后,mediaurl将可以在html中使用

mark

图片还是没有显示。因为url中没有处理图片相应路径的url

Django1.9.8 urls.py:

from django.views.static import serve
    # 处理图片显示的url,使用Django自带serve,传入参数告诉它去哪个路径找,我们有配置好的路径MEDIAROOT
    url(r‘^media/(?P<path>.*)$‘, serve, {"document_root": MEDIA_ROOT })

mark

Django2.0.1 urls.py:

from django.views.static import serve
# 处理图片显示的url,使用Django自带serve,传入参数告诉它去哪个路径找,我们有配置好的路径MEDIAROOT
    re_path(r‘^media/(?P<path>.*)‘, serve, {"document_root": MEDIA_ROOT })

完善xadmin的adminx为机构添加分类索引字段

organization/adminx.py

# 机构课程信息管理器
class CourseOrgAdmin(object):
    list_display = [‘name‘, ‘desc‘,‘category‘, ‘click_nums‘, ‘fav_nums‘,‘add_time‘ ]
    search_fields = [‘name‘, ‘desc‘, ‘category‘,‘click_nums‘, ‘fav_nums‘]
    list_filter = [‘name‘, ‘desc‘,‘category‘ ,‘click_nums‘, ‘fav_nums‘,‘city__name‘,‘address‘,‘add_time‘]

去除加载小圈圈

static/css/style.css中scrollLoading置为空:

.scrollLoading {
}

完成后台数据添加,列表页数据展示。对应7-3&7-4

7-5 列表分页功能

github搜索django-pure-pagination

pip install django-pure-pagination

mark

install app中添加:

‘pure_pagination‘,

可设置参数;

PAGINATION_SETTINGS = {
    ‘PAGE_RANGE_DISPLAYED‘: 10,
    ‘MARGIN_PAGES_DISPLAYED‘: 2,
    ‘SHOW_FIRST_PAGE_WHEN_INVALID‘: True,
}

mark

PAGE_RANGE_DISPLAYED是总共会显示多少个page。(包括省略号,包括两边和中间)

MARGIN_PAGES_DISPLAYED是旁边会显示多少个。

SHOW_FIRST_PAGE_WHEN_INVALID:当输入页数不合法是否要跳到第一页

官方实例;

from django.shortcuts import render_to_response

from pure_pagination import Paginator, EmptyPage, PageNotAnInteger

    # 尝试获取页数参数
    try:
        page = request.GET.get(‘page‘, 1)
    except PageNotAnInteger:
        page = 1
    # objects是取到的数据
    objects = [‘john‘, ‘edward‘, ‘josh‘, ‘frank‘]

    # Provide Paginator with the request object for complete querystring generation
    # 对于取到的数据进行分页处理。
    p = Paginator(objects, request=request)
    # 此时前台显示的就应该是我们此时获取的第几页的数据
    people = p.page(page)

    return render_to_response(‘index.html‘, {
        ‘people‘: people,
    }

我们对照着的实现:

from pure_pagination import Paginator, EmptyPage, PageNotAnInteger
class OrgView(View):
    def get(self,request):
        # 查找到所有的课程机构
        all_orgs = CourseOrg.objects.all()
        # 总共有多少家机构使用count进行统计
        org_nums = all_orgs.count()
        # 取出所有的城市
        all_city = CityDict.objects.all()
        # 对课程机构进行分页
        # 尝试获取前台get请求传递过来的page参数
        # 如果是不合法的配置参数默认返回第一页
        try:
            page = request.GET.get(‘page‘, 1)
        except PageNotAnInteger:
            page = 1
        # 这里指从allorg中取五个出来,每页显示5个
        p = Paginator(all_orgs, 5, request=request)
        orgs = p.page(page)

        return render(request, "org-list.html", {
            "all_orgs":orgs,
            "all_city": all_city,
            "org_nums": org_nums,
        })

对于html中分页进行配置

不再是objects,而是objectlist

mark

使用默认的render

mark

mark

自定义html的样式

mark

本小节完成对应commit:

7-3, 4 & 5:完成列表数据展示列表分页功能:使用pure_pagination

7-6 分类筛选功能

mark

当用户点击某一个city时对应加上参数city的id

在后台处理这个city

mark

获取传入的参数进行进一步筛选。

mark

将city_id传回html,使得可以知道哪个是选中的。

mark

因为city.id是后端传回来的值是一个int。所以我们要做类型转换。

mark

当city_id为空的时候,显示全部。

后台处理类别

  # 类别筛选
        category = request.GET.get(‘ct‘, "")
        if category:
            # 我们就在机构中作进一步筛选类别
            all_orgs = all_orgs.filter(category=category)

返回前台类别值以active

  return render(request, "org-list.html", {
            "all_orgs":orgs,
            "all_city": all_city,
            "org_nums": org_nums,
            "city_id":city_id,
            "category":category,
        })

mark

对于类别做同样的ifequal判断

mark

如上图所示进行城市与分类的联动:

当选择全部类别的时候,就只通过当前城市id。

当选择全部城市的时候,就只通过当前目录id。

当两者都选的时候使用&连接。

刚才统计机构数目过早,应该移到后面后面已经筛选过后,

 # 总共有多少家机构使用count进行统计
        org_nums = all_orgs.count()

课程机构排名

   # 热门机构,如果不加负号会是有小到大。
        hot_orgs = all_orgs.order_by("-click_nums")[:3]

mark

循环时内置变量forloop.counter取当前循环到第几次

待完成:点击排名机构的连接

课程机构排序。

学习人数,课程数

organization/models.py

CourseOrg

 # 当学生点击学习课程,找到所属机构,学习人数加1
    students = models.IntegerField(default=0, verbose_name=u"学习人数")
    # 当发布课程就加1
    course_nums =  models.IntegerField(default=0, verbose_name=u"课程数")
makemigrations organization
migrate organization

前端页面学习人数,添加参数sort

mark

 # 进行排序
        sort = request.GET.get(‘sort‘, "")
        if sort:
            if sort == "students":
                all_orgs = all_orgs.order_by("-students")
            elif sort == "courses":
                all_orgs = all_orgs.order_by("-course_nums")

添加选择效果

mark

原文学习来自简书,作者:天涯明月笙
链接:https://www.jianshu.com/p/516349eacdc6

原文地址:https://www.cnblogs.com/xinjie57/p/9235608.html

时间: 2024-10-12 04:41:00

django+xadmin在线教育平台(十五)的相关文章

django+xadmin在线教育平台(四)

3-2 配置表单页面 必要的该说的,该了解的 前置条件: 你已经学习了前面教程.将项目的文件夹目录结构,setting配置等修改完毕与我保持一致. 本节通过Django快速的配置一个留言板页面来学习 Django从请求到响应的整个完整流程.为我们开发在线教育平台打下基础. mark 上图便是本节教程所要用到的静态页面: 前往Github下载:form.html 具体的业务:填写信息 -> 然后点击提交 ->数据被存储到数据库. 这个html是一个单文件,里面已经包含了css js内容. 将ht

django+xadmin在线教育平台(十六)

7-7 modelform 提交我要学习咨询1 对应表userask form会对字段先做验证,然后保存到数据库中. 可以看到我们的forms和我们的model中有很多内容是一样的.我们如何让代码重复利用呢? 使用modelform解决这个问题. # encoding: utf-8 from django import forms from operation.models import UserAsk __author__ = 'mtianyan' __date__ = '2018/1/12

django+xadmin在线教育平台(三)

通过留言版功能回顾django基础知识 将对于django目录结构,使用Django快速搭建可以提交的表单页面,models.py , urls.py, views.py. 从数据库中取出数据展示到html中:Django Template的配置. 即django的基础知识通过这个留言板项目进行一个全面细致的学习. 3-1 django目录结构 django目录: projectname : 保存Django项目的urls,setting,uwsgi文件 如下图新建一个Django项目Djang

Django+xadmin打造在线教育平台(五)

Django+xadmin打造在线教育平台(五)   代码 github下载 八.课程详情页功能的实现 8.1.课程列表 (1)配置urls MxOnline/urls中 path("course/", include('course.urls', namespace="course")), course里面新建urls.py # course/urls.py from django.urls import path,re_path from .views impo

Django打造在线教育平台_day_3: 搭建后台管理系统Xadmin

xadmin是比Django自带的admin更加强大的系统 1.安装xadmin的两种方式: 方式一:pip install xadmin 方式二:github下载最新的源码(推荐,因为功能最新) 2.方式一安装:虚拟环境下 pip install xadmin python3的环境安装xadmin时,直接pip install xadmin出现 README.rst这个文件的编码有问题,可以内容没什么重要的,可以直接到github上下载安装包,然后新建一个txt空文件,把文件名改成README

Django打造在线教育平台_day_3: 搭建后台管理系统Xadmin之其他app的数据表注册

courses/adminx.py import xadmin from .models import Course, Lesson, Video, CourseResource class CourseAdmin(object): list_display = ['name', 'desc', 'detail', 'degree','learn_times', 'students','fav_nums','image','click_nums','add_time'] # 列表显示 searc

Django打造在线教育平台_day_4: 完成注册功能

1.把注册html页面复制到templats目录下 2.把功能写在users/views.py文件中 3.urls.py文件添加代码 from users.views import RegisterView urlpatterns = [ url(r'^register/$', RegisterView.as_view(), name='register'), ] 4.修改index与register.html <a style="color:white" class="

Django打造在线教育平台_day_3: 搭建后台管理系统Django自带的admin

1.后台管理系统的特点:权限管理.少前端样式.快速开发 2.Django自带的admin后台管理系统,新建项目时会自动建立,admin也可以看成一个app 运行了程序打开链接:http://127.0.0.1:8000/admin/,就进入了后台管理系统登录页面 3.新建超级用户: Tools 工具栏运行 run manage.py Task 输入:createsuperuser,再根据提示输入用户名.邮箱.密码 4.登录成功: 5.把系统语言设置为中文与设置本地时间:修改MxOnline/se

Django打造在线教育平台_day_2:新建users app 编写models之扩展user表

1.使用pycharm创建app Tools 工具栏运行 run manage.py Task 输入:startapp users 2.查看django生成的默认的users表auth_user,看字段能否满足需要的,不能就在users/models.py中编写models自定义user表继承auth_user的字段. from django.db import models # AbstractUser包含的Django默认生成的user字段 from django.contrib.auth.