def sheet_detail(request, slug): sheet = Sheet.objects.get(slug=slug) assignments = sheet.assignment_set.all() child_columns_count = dict() for assignment in assignments: child_columns_count[assignment] = 0 for task in assignment.task_set.all(): child_columns_count[assignment] += task.problem_set.count() or 1 if request.user.has_perm('sheets.change_sheet', sheet): users = get_users_with_perms(sheet) teachers = sorted([user for user in users if user.has_perm('sheets.change_sheet', sheet)], key=lambda user: user.last_name) students = SheetAPI.get_students_for_sheet(sheet) MarkAPI.unlock_marks(request.user, sheet) return render(request, 'sheet_detail.html', { 'sheet': sheet, 'teachers': teachers, 'students': students, 'assignments': assignments, 'child_columns_count': child_columns_count }) raw_marks = SheetAPI.get_marks_for_user(request.user, sheet) marks = [] for ind, mark in enumerate(raw_marks): mark_dict = dict(mark=raw_marks[ind].mark, comment=raw_marks[ind].comment) if type(raw_marks[ind]) is BoolMark: mark_dict['grade_system'] = BaseAssignment.BOOL_MARK elif type(raw_marks[ind]) is ZeroToFiveMark: mark_dict['grade_system'] = BaseAssignment.ZERO_FIVE elif type(raw_marks[ind]) is ZeroToTenMark: mark_dict['grade_system'] = BaseAssignment.ZERO_TEN else: mark_dict['grade_system'] = BaseAssignment.ZERO_HUNDRED marks.append(mark_dict) overall_mark = MarkAPI.map_overall_mark(sheet.overall_mark(request.user)) return render(request, 'sheet_detail_student.html', { 'sheet': sheet, 'assignments': assignments, 'child_columns_count': child_columns_count, 'marks': marks, 'overall_mark': overall_mark })