您现在的位置是: 网站首页 >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
0人参与,0条评论

当前用户

未登录,点击   登录

站点信息

  • 建站时间:网站已运行2223天
  • 系统信息:Linux
  • 后台程序:Python: 3.8.10
  • 网站框架:Django: 3.2.6
  • 文章统计:257 篇
  • 文章评论:60 条
  • 腾讯分析网站概况-腾讯分析
  • 百度统计网站概况-百度统计
  • 公众号:微信扫描二维码,关注我们
  • QQ群:QQ加群,下载网站的学习源码
返回
顶部
标题 换行 登录
网站