成績管理
為了方便老師統計修課學生在課程中的表現,因此再實作一個功能,在同一個頁面上列出所有修課學生的每份作業成績與心得成績。
新增路徑規則
開啟應用程式 Course
的路徑規則檔 course/urls.py
,新增第 36 行:
urlpatterns = [
path('', CourseList.as_view(), name='course_list'),
path('create/', CourseCreate.as_view(), name='course_create'),
path('<int:cid>/', CourseView.as_view(), name='course_view'),
path('<int:cid>/edit/', CourseEdit.as_view(), name='course_edit'),
path('<int:cid>/enroll/', CourseEnroll.as_view(), name='course_enroll'),
path('<int:cid>/users/', CourseUsers.as_view(), name='course_users'),
path('<int:cid>/seat/', CourseEnrollSeat.as_view(), name='course_seat'),
path('<int:cid>/msg/', include(msg_urlpatterns)),
path('<int:cid>/assign/', include(assignment_urls)),
path('<int:cid>/remark/', include(remark_urls)),
path('<int:cid>/score/', CourseScore.as_view(), name='course_score'),
]
新增處理視圖類別
想在頁面上顯示課程裡每位學生每一份作業的成績,得自行由不同的資料夾源擷取相關內容進行組合後,再交由頁面範本顯示。請開啟 course/views.py
,新增以下內容:
class CourseScore(CourseAccessMixin, TemplateView):
permission = COURSE_PERM_TEACHER
template_name = 'course/course_score.html'
extra_context = {'title': '成績總表'}
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
students = self.course.enroll_set\
.select_related('stu')\
.order_by('seat')
assignments = self.course.assignments.all()
aid_list = assignments.values_list('id')
acnt = assignments.count()
works = Work.objects.filter(assignment__in=aid_list)
idmap = {}
for a in enumerate(assignments):
idmap[a[1].id] = a[0]
for stu in students:
scores = [0]*(acnt+2)
sum = stu.remark_score
sworks = filter(lambda w: w.user_id == stu.id, works)
for w in sworks:
scores[idmap[w.assignment_id]] = w.score
sum += w.score
scores[acnt] = stu.remark_score
scores[acnt+1] = round(sum / (acnt+1), 1)
stu.scores = scores
ctx['assignment_list'] = assignments
ctx['student_list'] = students
return ctx
撰寫頁面範本
課程檢視頁面
修改課程檢視頁面範本 templates/course/course_detail.html
,插入第 59 - 61 行,新增成績總表按鈕:
{% if course.teacher == user %}
<div id="teacher_op" class="btn-group">
<a href="{% url 'course_msgbroadcast' course.id %}" class="{{ b2 }}">
<i class="fas fa-bullhorn"></i> 發布公告
</a>
<a href="{% url 'remark_users' course.id %}" class="{{ b2 }}">
<i class="fas fa-lightbulb"></i> 學生心得
</a>
<a href=" {% url 'course_score' course.id %}" class="{{ b2 }}">
<i class="fas fa-th"></i> 成績總表
</a>
</div>
{% endif %}
課程成績總表
新增課程成績總表頁面範本檔 templates/course/course_score.html
,內容如下:
{% extends "course/course_detail.html" %}
{% block course_detail_body %}
<table class="table table-sm table-bordered">
<thead>
<tr>
<th>學生</th>
{% for a in assignment_list %}
<th>
<span class="badge badge-dark">{{ forloop.counter }}</span>
{{ a.title }}
</th>
{% endfor %}
<th>心得</th>
<th>平均</th>
</tr>
</thead>
<tbody>
{% for stu in student_list %}
<tr>
<td>
<span class="badge badge-primary">{{ stu.seat }}</span>
{{ stu.stu.first_name }}
</td>
{% for s in stu.scores %}
<td>{{ s }}</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
成績管理
為了方便老師統計修課學生在課程中的表現,因此再實作一個功能,在同一個頁面上列出所有修課學生的每份作業成績與心得成績。
新增路徑規則
開啟應用程式
Course
的路徑規則檔course/urls.py
,新增第 36 行:新增處理視圖類別
想在頁面上顯示課程裡每位學生每一份作業的成績,得自行由不同的資料夾源擷取相關內容進行組合後,再交由頁面範本顯示。請開啟
course/views.py
,新增以下內容:撰寫頁面範本
課程檢視頁面
修改課程檢視頁面範本
templates/course/course_detail.html
,插入第 59 - 61 行,新增成績總表按鈕:課程成績總表
新增課程成績總表頁面範本檔
templates/course/course_score.html
,內容如下: