Django在线教育平台

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

2019-06-04  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读