对应github地址:第9天
一. 实现我要学习功能
.png)
里面的三个字段对应operation/models/UserAsk中的变量
1. 首先对表单进行后台验证,新建orgazaiton/form文件,然后在里面定义之前的表单验证类。
因为我们已经定义了UserAsk类,发现定义的表单验证类和UserAsk类很相似,那么能不能把这个models里的类转变为表单验证类呢?那么我们需要用到ModelForm
.png)
2. 改写URL结构
首先改写org-list.html的访问URL,在mxonline/urls.py中将原先的URL改写为
.png)
新建organization/urls.py
.png)
然后访问http://127.0.0.1:8000/org/list,即可打开原先http://127.0.0.1:8000/org_list的访问内容
3. 使用modelform做表单提交
这里使用ajax异步操作,不对整个页面进行刷新,因此我们不能直接render一个页面回来,而是给前端返回json数据,而不是页面。那么就需要使用到HttpResponse类来指明给用户返回哪种类型数据
from django.http import HttpResponse
3.1 编写视图类organization/views.py->AddUserAskView
.png)
注意HttpResonse里面的单双引号的问题,一样要那样写,否则会出错,原因不明
3.2 organization/urls.py 中新增URL
.png)
3.3 url-list.html中关于我要学校的表单代码中的<form>标签中增加{% csrf_token %}
3.4 相关ajax请求在base.html中,看不太懂,注意里面的url, msg都和之前的设置相关联
.png)
监听这个button,如果用户点击了button,我们就向这个url进行post请求,然后把表单进行序列化
3.5 手机号码验证是否合法,在organization/forms.py中添加 clean_mobile函数(必须以clean开头)
.png)
二. 机构详情展示
1. 准备工作
在后台中新增几个教师和课程的数据,发现之前课程里没有到机构的外键,所有在courses/models.py-->class Course中新建一个外键
.png)
把org-detail-course.html, org-detail-desc.html, org-detail-homepage.html, org-detail-teachers.html 这四个页面放到templates目录下
2. 编写基础模板
我们发现这4个页面很相似,所以要再写一个基础页面org_base.html让他们来重载,把org-detail-homepage.html内容复制过来
2.1 把title名字用block包起来,在css, js后面新增block,用来处理在不同的页面可能定制不同的样式
.png)
.png)
.png)
2.2 分析页面可发现,页面左边是固定的,页面右边不同,对应的在代码中有<div class="left">,<div class="right">,因此我们需要用block包住<div class="right">
.png)
面包屑那里也要加block
.png)
2.3 替换js, css路径
重载static变量
.png)
使用模板标签修改路径如下
.png)
3. org-detail-homepage.html继承基础页面
删掉原先内容,把org_base.html的<div class="right">的3个div剪切过来
.png)
4. 为机构首页添加URL,view
organization/urls.py中增加
.png)
需要传一个课程机构的ID,来指定是哪个机构的首页
定义view,organization/views.py中新增
.png)
courses/models.py/class Course中有一个机构的外键,那么机构为主,所以可在机构的view中使用一个对象+课程类小写course+下划线+set的方法反向取到课程
5. 填充org-detail-homepage.html页面
原先有三个课程的<div>标签,把其中一个<div>放到for循环模板中,删掉其他
.png)
6. 在org-list.html页面修改机构<dl>标签中的机构的跳转链接<a href="org-detail-homepage.html">
修改为
.png)
其中course_org.id 为课程机构的ID号,数据库中自动生成的id号, 传递到跳转链接里,然后在organization/urls.py中的<int:org_id>就能取到这个id
.png)
all_orgs.object_list中的object_list为分页时的固定写法
7. 修改org_base.html中图片地址
在子页面中使用的变量标签,其实也是可以在基本页面中直接使用
.png)
上面这段代码影响的是机构详情页里面的头部信息,如下
.png)
8. 机构教师信息填充
1). organization/models/class Teacher中新增一个讲师头像字段,并在后台添加头像
.png)
2). org-detail-homepage.html中找到表示讲师的代码并修改昵称和图片
.png)
三. 机构课程列表页(org-detail-course.html)
1. 把org-detail-homepage.html中的内容拷贝过来,只须替换<div class="right">和标题就好
.png)
2. 编写url和view
organization/views.py中添加
.png)
organization/urls.py中添加
.png)
3. 修改org-base.html的left部分代码,使点击左侧的机构课程可成功跳转到org-detail-course.html页面
.png)
4. 在org-detail-course.html中把信息补充完整
.png)
5. 增加机构课程选中状态
在organization/views.py-->class OrgHomeView中增加一个变量current_page = "home",
orgCourseView中增加变量current_page = "course"
并且分别加到render函数中传递到org-detail-homepage.html页面
然后就可以在org_base.html页面中的<div class="left">中增加判断条件
.png)
四. 课程介绍页面
1. 同样的把<div class="right">替换一下
.png)
2. 配置URL,view
organization/views.py中增加
.png)
organization/urls.py中增加
.png)
3. 增加点击机构介绍跳转链接
在org_base.html中的<div class="left">中修改
.png)
五. 机构讲师
1. 修改页面
.png)
2. 配置view, URL
.png)
urls.py中
.png)
3. 增加跳转链接,在org_base.html页面中修改为如下
.png)
4. 显示讲师头像等信息,修改org-detail-teachers.html页面如下
.png)
5. 面包屑导航
在org_base.html中修改面包屑代码
.png)
然后在所有子页面中分别加入,改为相应的名字
{% block page_title %}机构课程{% endblock %}
六.课程机构收藏功能,也是ajax提交
1. 写view, URL
organization/views.py中增加
.png)
organization/urls.py中增加
.png)
2. 机构收藏功能的ajax代码放在org-base.html中
修改117行代码成如下图
.png)
修改135行为下图
.png)
修改window.location.href的地址
.png)
3. 如果机构已收藏,我们刷新后,又会显示收藏字样,不会显示已收藏,怎么办呢
3.1 organization/views.py-->class OrgHomeView中增加如下代码
.png)
并且在return render中加上
"has_fav": has_fav
3.2 org_base.html中大概51行的固定字段"收藏"修改为如下
.png)
分别在OrgCourseView, OrgDescView, OrgTeacherView添加上面相同代码
4. 机构页面显示登陆状态
把index.html中的<head>标签中if模板标签拷贝到org_base.html中替换一下
- 17、Django实战第17天:机构详情展示
1.进入xadmin添加测试数据(教师.课程) 2.把以下4个前端页面复制到templates中 先打开这几个页面分析,它们和之前的课程机构列表页是不一样的机构,且没有共同的部分,但是这4个页面却是类 ...
- 25、Django实战第25天:讲师详情页
1.复制teacher-detail.html到templates目录下 2.编辑teacher-detail.html,继承base.html 3.编辑organization.view.py cl ...
- mxonline实战13,授课讲师列表页,详情页,index页面全局导航
对应github地址:第13天 把teacher-list.html和teacher-detail.html拷贝过来 一. 授课讲师列表页 1. 修改html文件 把org-list.ht ...
- mxonline实战11,课程详情页2,课程章节页
对应github地址:第11天 一. 课程详情页2 1. 课程详情页第2块中的课程介绍中,修改course-detail.html中代码,搜索课程详情,找到如下代码
- 20、Django实战第20天:课程详情页
1.把course-detail.html复制到templates目录下 2.编辑course-detail.html,分析页面,继承base.html 3.编辑courses.views .... ...
- 18、Django实战第18天:课程机构收藏功能
这里点击"收藏"也是ajax异步操作,我在operation.model.py中创建了一个用户收藏表,其中fav_id字段,如果我们收藏的是课程,那就是课程id,如果收藏的是课程机 ...
- ajax“显示弹窗详情”和“删除”功能练习
1.查看详细信息,以弹窗的形式显示,使用ajax 2.批量删除 “查询”功能可以参考前面的文章,这里只讲解ajax“显示弹窗详情”和“删除”功能 第一:在body中的代码 <title>a ...
- mxonline实战10,课程列表页,课程详情页1
对应github地址:第10天 一. 课程列表页 1. 拷贝course-list.html到templates目录中 2. 编写url和view 在courses/views.py中新加
- mxonline实战8,机构列表分页功能,以及按条件筛选功能
对应github地址:列表分页和按条件筛选 一. 列表分页 1. pip install django-pure-pagination 2. settings.py中 install ...
随机推荐
- 2018,学会python 在新公司扎根
五月份跳槽了,来新公司,是个跟我之前业务完全不同的行业,偏硬件,可是对硬件没有什么概念.而且自己都不知道从哪里下手的感觉.终于明白自己在上家公司已经将人待的生了锈,我们庆幸,也许还是不晚的. 执行学习 ...
- Unknown type name 'NSString'
今天看到个问题,编辑工程提示Unknown type name 'NSString',如下图 导致出现异常的原因是是因为工程中添加了ZipArchive(第三方开源解压缩库) 一般情况下出现“Unkn ...
- MySQL 根据年、季度、月、周、日统计数据
-- 计算每年订单的总价格 select date_format(t.order_time,'%Y') years,sum(t.order_amount) '总价格' from lf_order t ...
- Golang之struct
1.用来定义复杂数据结构 2.struct里面可以包含多个字段(属性) 3.struct类型可以定义方法,注意和函数的区分. 4.struct类型是值类型 5.struct类型可以嵌套 6.Go语言没 ...
- Laravel 使用 seeder 使用要点
一.关于 DB use DB; 再使用 DB::table(database.table)->get(); 二.关于 ERROR 1366 (HY000): Incorrect string v ...
- 基于Web Service的客户端框架搭建四:终结篇
前言 这是这个系列的终结篇,前面3个博客介绍了一下内容: 1.使用Http Post方式调用Web Service 2.客户端框架之数据转换层 3.客户端框架之代理层 框架结构 框架是基于C#的,在V ...
- centos7安装kubernetes 1.1
原文地址:http://foxhound.blog.51cto.com/1167932/1717105 前提:centos7 已经update yum update -y 一.创建yum源 maste ...
- docker 关于volumns的总结(转)
原文地址:http://www.cnblogs.com/ivictor/p/4834864.html Docker容器启动的时候,如果要挂载宿主机的一个目录,可以用-v参数指定. 譬如我要启动一个ce ...
- div模拟键盘输入
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- m2e 插件
官网 http://www.eclipse.org/m2e/ 在线安装地址 http://download.eclipse.org/technology/m2e/releases 插件简介 Launc ...