将讲师列表页面teachers-list.html拷贝到templates下。
继承base页面,重写需要block的地方:
在organization/views.py中编写讲师列表的接口:
1classTeacherListView(View):2"""讲师列表"""3defget(self,request):4#获取所有的讲师5all_teachers=Teacher.objects.all()67returnrender(request,'teachers-list.html',{8'all_teachers':all_teachers9})配置url:
from.viewsimportTeacherListViewurlpatterns=[re_path('teacher/list/',TeacherListView.as_view(),name='teacher_list'),#讲师列表]修改index.html中跳转到讲师列表页面的url:
在讲师列表页面需要显示讲师的年龄,需要在teacher的model中增加一个年龄的字段:
然后修改讲师列表页面显示讲师信息的代码:
在讲师列表接口中完善分页的逻辑:
1classTeacherListView(View):2"""讲师列表"""3defget(self,request):4#获取所有的讲师5all_teachers=Teacher.objects.all()67#统计讲师的总数8teacher_nums=all_teachers.count()910#分页11try:12page=request.GET.get('page',1)13exceptPageNotAnInteger:14page=115p=Paginator(all_teachers,5,request=request)16teachers=p.page(page)1718returnrender(request,'teachers-list.html',{19'all_teachers':teachers,20'teacher_nums':teacher_nums21})在遍历讲师的时候需要加上object_list属性,否则在分页会抛出异常:
修改前端分页显示的代码:
讲师可以根据人气进行排序,完善讲师列表接口中排序的逻辑:
1classTeacherListView(View):2"""讲师列表"""3defget(self,request):4#获取所有的讲师5all_teachers=Teacher.objects.all()67#统计讲师的总数8teacher_nums=all_teachers.count()910#排序,按点击数排序11sort=request.GET.get('sort','')12ifsort:13ifsort=='hot':14all_teachers=all_teachers.order_by('-click_nums')1516#分页17try:18page=request.GET.get('page',1)19exceptPageNotAnInteger:20page=121p=Paginator(all_teachers,5,request=request)22teachers=p.page(page)2324returnrender(request,'teachers-list.html',{25'all_teachers':teachers,26'teacher_nums':teacher_nums,27'sort':sort28})修改讲师列表页面中按人气选中的状态显示代码:
在讲师列表页面右侧有讲师排行版,完善讲师列表接口中排行榜的逻辑:
1classTeacherListView(View):2"""讲师列表"""3defget(self,request):4#获取所有的讲师5all_teachers=Teacher.objects.all()67#统计讲师的总数8teacher_nums=all_teachers.count()910#排序,按点击数排序11sort=request.GET.get('sort','')12ifsort:13ifsort=='hot':14all_teachers=all_teachers.order_by('-click_nums')1516#讲师排行版17teacher_sorted=all_teachers.order_by('-click_nums')[:3]1819#分页20try:21page=request.GET.get('page',1)22exceptPageNotAnInteger:23page=124p=Paginator(all_teachers,5,request=request)25teachers=p.page(page)2627returnrender(request,'teachers-list.html',{28'all_teachers':teachers,29'teacher_nums':teacher_nums,30'sort':sort,31'teacher_sorted':teacher_sorted32})修改讲师列表页面中显示讲师排行榜的代码:
将讲师详情页面teacher-detail.html拷贝到templates下。
1classTeacherDetailView(View):2"""讲师详情页面"""3defget(self,request,teacher_id):4#根据前端的讲师id找到对应的讲师5teacher=Teacher.objects.get(id=int(teacher_id))67#获取该老师所有的课程8all_courses=Course.objects.filter(teacher=teacher)910#讲师排行11teacher_sorted=Teacher.objects.all().order_by('-click_nums')[:3]1213returnrender(request,'teacher-detail.html',{14'teacher':teacher,15'all_courses':all_courses,16'teacher_sorted':teacher_sorted17})配置url:
1from.viewsimportTeacherDetailView23urlpatterns=[4re_path('teacher/detail/(P
修改讲师详情页面信息的显示代码:
在讲师详情页面可以收藏讲师,右侧可以收藏机构,完善讲师详情接口中收藏的判断逻辑:
1classTeacherDetailView(View):2"""讲师详情页面"""3defget(self,request,teacher_id):4#根据前端的讲师id找到对应的讲师5teacher=Teacher.objects.get(id=int(teacher_id))67#获取该老师所有的课程8all_courses=Course.objects.filter(teacher=teacher)910#讲师排行11teacher_sorted=Teacher.objects.all().order_by('-click_nums')[:3]1213#讲师收藏、机构收藏14has_teahcer_faved=False15ifUserFavorite.objects.filter(user=request.user,fav_type=3,fav_id=teacher_id):16has_teahcer_faved=True17has_org_faved=False18ifUserFavorite.objects.filter(user=request.user,fav_type=2,fav_id=teacher.org.id):19has_org_faved=True2021returnrender(request,'teacher-detail.html',{22'teacher':teacher,23'all_courses':all_courses,24'teacher_sorted':teacher_sorted,25'has_teahcer_faved':has_teahcer_faved,26'has_org_faved':has_org_faved27})修改讲师详情页面中收藏的判断代码:
因为收藏操作是由前端通过ajax异步操作的,需要在讲师详情页面的最下面加上script代码: