您现在的位置是: 网站首页 >Django >Django2.0.8+xadmin2实现在线学习网站 Django
【Django在线教育平台】09.机构详情、机构课程详情页
admin2019年6月4日 14:00 【Django | Html | JQuery 】 1353人已围观
Django2.0.8+xadmin2实现在线学习网站简介 Django2.0.8+xadmin2实现在线学习网站,课程、讲师、机构、用户收藏功能。GitHub地址:https://github.com/xyliurui/OnlineLearningPlatform ;Django版本:2.0.8
## 机构详情概览 * 机构首页 * 机构课程 * 机构介绍 * 机构讲师 登录xadmin添加基础的必要数据。添加课程与讲师。 ### 课程模型外键指向机构Course(models.Model) 课程中应该有一个外键指向它是哪个机构的。 **courses/models.py** ```python from organization.models import CourseOrg # 课程信息表 class Course(models.Model): DEGREE_CHOICES = ( ("cj", "初级"), ("zj", "中级"), ("gj", "高级") ) name = models.CharField(max_length=50, verbose_name='课程名') desc = models.CharField(max_length=300, verbose_name='课程描述') # 后面会改为富文本 detail = models.TextField(verbose_name='课程详情') degree = models.CharField(max_length=3, choices=DEGREE_CHOICES, verbose_name='课程难度') learn_times = models.IntegerField(default=0, verbose_name='学习时长(分钟数)') # 点击开始学习后记录学习人数 students = models.IntegerField(default=0, verbose_name='学习人数') fav_nums = models.IntegerField(default=0, verbose_name='收藏人数') image = models.ImageField(upload_to='course/%Y/%m', max_length=100, blank=True, null=True, verbose_name='封面图') # 点击到课程信息界面即需要记录点击数 click_nums = models.IntegerField(default=0, verbose_name='点击数') add_time = models.DateTimeField(default=datetime.now, verbose_name='添加时间') course_org = models.ForeignKey(CourseOrg, null=True, blank=True, related_name='courses', on_delete=models.CASCADE, verbose_name='所属机构') class Meta: verbose_name = verbose_name_plural = '课程' def __str__(self): return self.name ``` ### 机构讲师增加头像字段 ```python # 机构里的讲师信息 class Teacher(models.Model): org = models.ForeignKey(CourseOrg, on_delete=models.CASCADE, related_name='teachers', verbose_name='所属机构') name = models.CharField(max_length=50, verbose_name='讲师名称') work_years = models.IntegerField(default=0, verbose_name='工作年限') work_company = models.CharField(max_length=50, verbose_name='就职公司') work_position = models.CharField(max_length=50, verbose_name='公司职位') points = models.CharField(max_length=50, verbose_name=u"教学特点") click_nums = models.IntegerField(default=0, verbose_name=u"点击数") fav_nums = models.IntegerField(default=0, verbose_name=u"收藏数") add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间") image = models.ImageField(upload_to='teacher/%Y/%m', null=True, blank=True, max_length=100, verbose_name='讲师头像') class Meta: verbose_name_plural = verbose_name = '讲师' def __str__(self): return self.name ``` ### 增加字段后执行同步 ```python manage.py@DjangoOnlineLearningPlatform > makemigrations manage.py@DjangoOnlineLearningPlatform > migrate ``` 新增外键字段应该`null=true,blank=true`。 因为历史数据中没有这个外键字段 ### 机构首页视图OrgHomeView(View) ```python # 机构首页 class OrgHomeView(View): def get(self, request, org_id): # 通过id找到机构 course_org = CourseOrg.objects.get(id=org_id) # 通过机构找到这个机构的课程和教师 all_course = course_org.courses.all()[:4] all_teacher = course_org.teachers.all()[:4] return render(request, 'org-detail-homepage.html', locals()) ``` ### 机构首页url ```python from organization.views import OrgListView, AddUserAskView, OrgHomeView app_name = 'organization' urlpatterns = [ # 课程机构列表url path('list/', OrgListView.as_view(), name="org_list"), path('add_ask/', AddUserAskView.as_view(), name='add_ask'), re_path('home/(?P<org_id>\d+)/', OrgHomeView.as_view(), name='org_home'), # 机构详情首页 ] ``` ### 机构详情模板org-detail-homepage.html 使用for循环遍历返回的信息。 ![BLOG_20190604_140241_41](/media/blog/images/2019/06/BLOG_20190604_140241_41.png "博客图集BLOG_20190604_140241_41.png") ## 机构课程详情 ### 机构课程列表视图OrgCourseView(View) ```python # 机构课程详情 class OrgCourseView(View): def get(self, request, org_id): # 通过id找到机构 course_org = CourseOrg.objects.get(id=org_id) # 通过机构找到这个机构的课程,并按一些数据进行排序 all_course = course_org.courses.all().order_by('-students') sort = request.GET.get('sort', '') if sort: if sort == 'fav': all_course = all_course.order_by('-fav_nums') elif sort == 'click': all_course = all_course.order_by('click_nums') return render(request, 'org-detail-course.html', locals()) ``` ### 课程列表url ```python from organization.views import OrgListView, AddUserAskView, OrgHomeView, OrgCourseView app_name = 'organization' urlpatterns = [ # 课程机构列表url path('list/', OrgListView.as_view(), name="org_list"), path('add_ask/', AddUserAskView.as_view(), name='add_ask'), re_path('home/(?P<org_id>\d+)/', OrgHomeView.as_view(), name='org_home'), # 机构详情首页 re_path('id/(?P<org_id>\d+)/courses/', OrgCourseView.as_view(), name='org_course'), # 机构课程列表 ] ``` ### 课程列表模板org-detail-course.html 可以直接继承org-detail-homepage.html里面的部分代码 ```html {% block breadcrumb_org %} <li><a href="{% url 'org:org_home' org_id %}">{{ course_org.name }}</a></li> <li class="active">所有课程</li> {% endblock breadcrumb_org %} <div class="short-lst"> <h2>机构课程</h2> <ul> <!-- Short List --> <li> <p><a href="{% url 'org:org_course' org_id %}" {% ifequal sort '' %} style="font-weight: bold" {% endifequal %}> 学习人数(默认) </a></p> </li> <li> <p><a href="{% url 'org:org_course' org_id %}?sort=fav" {% ifequal sort 'fav' %} style="color: #BEBEBE" {% endifequal %}> 收藏人数 ↓</a></p> </li> <li> <p><a href="{% url 'org:org_course' org_id %}?sort=click" {% ifequal sort 'click' %} style="color: #BEBEBE" {% endifequal %}>点击数 ↓</a></p> </li> </ul> </div> ``` ![BLOG_20190604_140232_89](/media/blog/images/2019/06/BLOG_20190604_140232_89.png "博客图集BLOG_20190604_140232_89.png")
很赞哦! (1)
相关文章
文章交流
- emoji
当前用户
未登录,点击 登录专题目录
- 【Django在线教育平台】01.创建Django虚拟环境和项目
- 【Django在线教育平台】02.创建该项目用到的数据库模型类
- 【Django在线教育平台】03.xadmin后台系统配置,将models注册到xadmin中
- 【Django在线教育平台】04.模板配置,完成用户登录相关页面和逻辑
- 【Django在线教育平台】05.用户注册功能实现
- 【Django在线教育平台】06.找回密码,实现忘记密码及重置密码功能
- 【Django在线教育平台】07.授课机构列表显示,分页、分类筛选、排序功能
- 【Django在线教育平台】08.学习咨询表单ajax提交
- 【Django在线教育平台】09.机构详情、机构课程详情页
- 【Django在线教育平台】10.机构讲师、机构介绍详情页
- 【Django在线教育平台】11.机构收藏功能实现
- 【Django在线教育平台】12.课程列表及详情展示
- 【Django在线教育平台】13.课程内容页,该课程评论功能
- 【Django在线教育平台】14.用户登陆后开始学习,播放课程视频
- 【Django在线教育平台】15.授课讲师列表和详情功能
- 【Django在线教育平台】16.导航选中状态,全局搜索功能实现
- 【Django在线教育平台】17.个人中心用户修改密码、头像
- 【Django在线教育平台】18.个人中心修改邮箱及其他信息
- 【Django在线教育平台】19.个人中心显示我的课程、收藏、消息页面
- 【Django在线教育平台】20.用户退出功能
- 【Django在线教育平台】21.其他功能完善
- 【Django在线教育平台】22.xadmin的其它常见功能