Накидал быстренько так. Потестил, вроде работает.
views.py
from django.shortcuts import render, redirect, HttpResponse
# Переменная с вопросами и ответами/баллами
my_quests = {
1:['Выберите любое число', ['Два', 0],['Семь', 1],['Восемь', 2]],
2:['Выберите любой цвет', ['Красный', 0],['Желтый', 1],['Синий', 2]],
3:['Выберите любое животное', ['Корова', 0],['Носорог', 1],['Жираф', 2]],
4:['Выберите то, что нельзя выбрать', ['Можно выбрать', 0],['Нельзя выбрать', 1]],
5:['Попробуйте ничего не выбрать', ['Выбрать', 0],['Не выбрать', 1]],
}
# Отвечает за формирование элементов в форме
def render_form (number):
HTML_='<input name="page" value="'+str(number)+'" hidden><h3>'+my_quests[number][0]+'</h3>'
for row in my_quests[number][1:len(my_quests[number])]:
HTML_+='<p>'+row[0]+' <input name="result" value="'+str(row[1])+'" type="radio"></p>'
return HTML_
# Основной обработчик
def index(request):
data={'form_':''}
# Если в сессии нет нужных переменных, то создаем
if 'quest' not in request.session:
request.session['quest']={}
request.session['result'] = 0
index = 1
for row in my_quests:
request.session['quest'][index]=None
index +=1
request.session.modified = True
# Если нам пришел ответ, то считаем его
if 'result' in request.GET:
request.session['result'] += int (request.GET['result'])
request.session['quest'][request.GET['page']] = 'Done'
request.session.modified = True
print (request.session['quest'])
if 'page' not in request.GET:
return redirect ('/test/?page=1')
else:
# Если был получен ответ на этот вопрос, то идем дальше
if request.session['quest'][request.GET['page']] != None:
next_page = int(request.GET['page'])+1
# Если на все вопросы даны ответы, то возвращаем результат
if next_page-1>=len(my_quests):
return HttpResponse ('Вы завершили тестирование и набрали '+str(request.session['result'])+' баллов!')
return redirect ('/test/?page='+ str(next_page))
else:
# Рендерим форму
data['form_']=render_form (int(request.GET['page']))
return render (request, 'index.html', data)
Файлик с шаблоном index.html
<html>
<head>
<title>Тестирование</title>
</head>
<body>
<form method="GET">
<p>{{ form_|safe }}</p>
<p><button>Ответить</button></p>
</form>
</body>
</html>
Естественно, вопросов может быть больше, количество ответом больше/меньше, а на строке return HttpResponse ('Вы завершили тестирование... рекомендую добавить функцию, которая по количеству набранных баллов будет возвращать результат.
ЗЫ: Код постарался сделать максимально гибким, чтобы править пришлось только переменную my_quests