从今天开始,我们将完成"公开课"课程的相关功能.....
1、把course-list.html复制到templates目录下
2、这个页面的头部、底部与之前定义的base.html模板是一样的,所以我们可以继承它,编辑course-list.html
3、在app.courses下新建urls.py文件,以后我们把课程相关的url都放在这个文件下
4、编辑项目根下的urls.py,把courses下面的urls.py包含进去
urlpatterns = [ ... #课程相关url配置 url(r'course/', include('courses.urls', namespace='course')), ]
5、我先把页面展示出来,编写个view,编辑courses.views.py
from django.shortcuts import render from django.views.generic import View class CourseListView(View): def get(self, request): return render(request, 'course-list.html', {})
6、添加一条url,编辑courses.urls.py
from django.conf.urls import url from .views import CourseListView urlpatterns = [ url(r'^list/$', CourseListView.as_view(), name='course_list'), ]
7、我修改下首页的导航
8、现在可以访问到课程列表页了,点击首页中的公开课或者http://127.0.0.1:8000/course/list/
默认是"最新",先来完成这部分,编辑views
... from .models import Course class CourseListView(View): def get(self, request): all_courses = Course.objects.all().order_by('-add_time') #根据时间排序 return render(request, 'course-list.html', { 'all_courses': all_courses, })
编辑course-list.html
分页功能
编辑views
加了分页以后,页面的for循环那里要改下
页码部分
"最热门"和"参与人数"排序
编辑vires
from django.shortcuts import render from django.views.generic import View from .models import Course from pure_pagination import Paginator, PageNotAnInteger class CourseListView(View): def get(self, request): all_courses = Course.objects.all().order_by('-add_time') #根据时间排序 #课程排序 sort = request.GET.get('sort', '') if sort: if sort == 'host': all_course = all_courses.order_by('-click_nums') elif sort == 'students': all_courses = all_courses.order_by('-students') # 对课程进行分页 try: page = request.GET.get('page', 1) except PageNotAnInteger: page = 1 p = Paginator(all_courses, 3, request=request) courses = p.page(page) return render(request, 'course-list.html', { 'all_courses': courses, 'sort': sort, })
编辑前端course-list.html
热门课程推荐
编辑views
前端页面
访问页面后,发现存在一个问题,就是课程难度那里显示的是我们数据库中的字母
那么该如何显示我们在model中设置的中文部分呢???
Django专门为choice设置了一种用法,编辑course-list.html