把昨天没做完的学生管理部分做完。
预期效果是用标签页来区分不同的学生,并且在页中还能进行分页。可以添加学生,并且学生是一个超链接,点击之后会跳转到学生的详情页面,带有一个删除学生的按钮。
在分页时遇到了困难,因为我用了一个标签页来显示学生
若要分页,似乎得传五个pageinator进来,并且还要把不同班的学生也分成五个传到前端,实现起来有点繁琐。
这个问题暂且保留,因为今天的时间不太多,暂且把大致框架写出来吧。
首先做标签页显示不同班级的学生,主要就是在前端页面
通过班级来循环写标签
然后在班级的标签中,循环遍历学生,判断学生的班级id与当前循环的班级id是否相等,相等则创建出来。
<el-tabs id="elTab" type="border-card"> {% for grade in grades %} <el-tab-pane id="grade{{ grade.id }}" label="{{ grade.g_name }}"> {% for student in students %} {% ifequal student.s_grade_id grade.id %} <li> <el-link :underline="false" href="{% url 'app:getStudent' student.id %}">{{ student.s_name }}</el-link> </li> {% endifequal %} {% endfor %} </el-tab-pane> {% endfor %} </el-tabs>
在后台只要把数据传过去就行。效果图:
点击学生名字则会进入学生详情页面,用a标签来实现这一功能,在点击时还会把学生id传进入,以此作为根据来查询学生。
学生详情列表的后台实现,根据传进来的学生id get到学生对象,再把对象传给前端。
def getStudent(request, s_id): student = Student.objects.get(id=s_id) data = { "student": student, 'headPath': str(student.s_head), } return render(request, 'student_data.html', data)
删除学生同理。
def delStudent(request, s_id): try: student = Student.objects.get(id=s_id) student.delete() except (KeyError, Student.DoesNotExist): print('数据不存在') except Student.MultipleObjectsReturned: print('存在多个相同数据') return redirect(reverse('app:students'))
添加学生功能,上传头像暂时没有实现
elif request.method == 'POST': student = Student() student.s_name = request.POST.get('name') student.s_age = request.POST.get('age') if request.FILES.get('head') is not None: student.s_head = request.FILES.get('head') student.s_grade_id = request.POST.get('grade') student.save() return redirect(reverse('app:students'))
get('head')没有取到期望的值。
剩下需要解决的问题:
用户头像的修改、学生分页、学生头像上传、学生管理页面因为缓存问题在更新时不能第一时间把最新数据呈现出来
期望实现的功能:
中间件中当链接个人中心和学生管理页面时,判断是否登录,没有登录则重定向到登录页面。
页面画的好看一点。。
早睡不熬夜,明天会更好。