美文网首页Django在线教育平台
【Django在线教育平台】09.机构详情、机构课程详情页

【Django在线教育平台】09.机构详情、机构课程详情页

作者: 吾星喵 | 来源:发表于2019-06-04 14:35 被阅读12次

    专题: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

    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
    

    机构讲师增加头像字段

    # 机构里的讲师信息
    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
    

    增加字段后执行同步

    manage.py@DjangoOnlineLearningPlatform > makemigrations
    manage.py@DjangoOnlineLearningPlatform > migrate
    

    新增外键字段应该null=true,blank=true

    因为历史数据中没有这个外键字段

    机构首页视图OrgHomeView(View)

    # 机构首页
    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

    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

    机构课程详情

    机构课程列表视图OrgCourseView(View)

    # 机构课程详情
    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

    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里面的部分代码

    {% 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

    相关文章

      网友评论

        本文标题:【Django在线教育平台】09.机构详情、机构课程详情页

        本文链接:https://www.haomeiwen.com/subject/oeglxctx.html