(十五)Django - template(part2)

昨天測驗表已經成功放到網頁上,今天則是要做分數的加總,需要修改昨天寫好的function play及新增function result。

views.py

1
2
3
4
5
6
7
8
9
10
11
12
def play(request):
question = Question.objects.all()
if request.method == 'POST': #當測驗者提出表單(submit)
total = [] #匯集測驗者每題的得分
for q in question:
select = request.POST[str(q.id)] #獲得測驗者選擇的選項
choice = q.choice_set.all().values()
for i in choice: #loop四個選項
if i['choice_text'] == select:
total.append(i['score']) #選項對照的得分
return redirect(result, total=sum(total)) #傳送表單完就跳轉至結果畫面
return render(request, 'play.html', {'question':question})
  1. request.POST[str(n)]也可以寫成request.POST.get(str(n))。
  2. 為了讓傳送表單後轉到result.html,這邊使用redirect,裡面的第一個參數是view name,並傳送總分數total給view result。

測驗結果畫面的函數如下:

1
2
3
def result(request, total):
score = total
return render(request, 'result.html', {'score':score})

template

在template資料夾下新增result.html,當作測驗結果網頁,並放上最後的總得分:

1
2
3
4
5
6
7
8
9
<!DOCTYPE html>
<html lang=\"en\">
<head>
<meta charset=\"UTF-8\">
<title>Title</title>
</head>
<body>總分:{{ score }}
</body>
</html>

小結:明天再把結果畫面裝飾一下 ^^