Пожалуйста, есть ли способ сделать мой django страницы пагинации с викторины App?
Моя проблема заключается в пагинации страницы на Django quiz App, когда я нажимаю на следующий вопрос, он снимает выбор с предыдущего выбранного ввода и записывается только один ответ.
Коды форм:
<form action="/calculate_marks" onsubmit="return saveAns()" enctype="multipart/form-data" id ='quiz' method="POST">
{% csrf_token %}
<input type="hidden" name="csrfmiddlewaretoken" value="C24rUotmdHawVQJL3KrqiWxvti8UffOFYUc8TRbZtLt36AVLdP3jbkzUVe3beRAa">
<h1>{{course}} Quiz</h1><br>
<h4>Number of Questions in the Quiz: {{q_count}}</h4>
<hr>
<p>pages {{page_obj}}</p>
<hr>
{% for q in page_obj %}
<!-- <h6 style="text-align: right;">[marks {{q.marks}}]</h6> -->
{% if q.img_quiz.url %}
<div class="text-center" ><img src="{{q.img_quiz.url}}" width="100%" height="300px" alt=""> </div><br>
{% endif %}
<div style="border: 2px dotted green;" class="container shadow-lg mb-1 bg-white rounded">
<p class="d-flex" style="overflow-x: auto; white-space: pre-wrap; font-size: 20px;font-family: sans-serif;" >
{{ q.question }}</p>
{% if q.marks %}
<h6 style="text-align: right;">[marks {{q.marks}}]</h6>
{% endif %}
</div>
{% if q.option1 %}
<div class="card-header shadow-lg mb-1 bg-white rounded">
<input type="radio" name="{{forloop.counter}}" id="{{q.option1}}" value="Option1">
<label for="option1"> {{q.option1}}</label><br>
</div>
{% endif %}
{% if q.option2 %}
<div class="card-header shadow-lg mb-1 bg-white rounded">
<input type="radio" name="{{forloop.counter}}" id="{{q.option2}}" value="Option2">
<label for="option2">{{q.option2}}</label><br>
</div>
{% endif %}
{% if q.option3 %}
<div class="card-header shadow-lg mb-1 bg-white rounded">
<input type="radio" name="{{forloop.counter}}" id="{{q.option3}}" value="Option3">
<label for="option3">{{q.option3}}</label><br>
</div>
{% endif %}
{% if q.option4 %}
<div class="card-header shadow-lg mb-1 bg-white rounded">
<input type="radio" name="{{forloop.counter}}" id="{{q.option4}}" value="Option4">
<label for="option4">{{q.option4}}</label><br>
</div>
{% endif %}
<br><br>
{% empty %}
<h1 class="card text-center text-danger">No Exam Available Yet. CHECK LATER</h1>
{% endfor %}
<input class="btn btn-primary" type="submit" value="Next Subject">
</form>
вычислить коды представления метки. Здесь я получаю входные данные из шаблона и передаю их в представление:
def calculate_marks_view(request):
if request.COOKIES.get('course_id') is not None:
course_id = request.COOKIES.get('course_id')
course=QMODEL.Course.objects.get(id=course_id)
total_marks=0
questions=QMODEL.Question.objects.all().filter(course=course)
for i in range(len(questions)):
selected_ans = request.COOKIES.get(str(i+1))
actual_answer = questions[i].answer
if selected_ans == actual_answer:
total_marks = total_marks + questions[i].marks
student = Student.objects.get(user_id=request.user.id)
result = QMODEL.Result()
result.marks=total_marks
result.exam=course
result.student=student
result.save()
return HttpResponseRedirect('take-exam')
else:
return HttpResponseRedirect('take-exam')
Яваскрипты, которые собирают входные ответы:
<script>
function saveAns(){
var ele = document.getElementsByTagName('input');
for(i = 0; i < ele.length; i++) {
if(ele[i].type="radio") {
if(ele[i].checked){
setCookie(ele[i].name,ele[i].value,3)
}
}
}
}
function setCookie(cname, cvalue, exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays*24*60*60*1000));
var expires = "expires="+ d.toUTCString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}
</script>
Коды пагинации:
<!-- pagination codes star -->
{% if page_obj.has_other_pages %}
<div class="container" id = ''>
<nav class="d-flex" aria-label="Page navigation example">
<ul class="pagination pagination-sm flex-wrap justify-content-center">
{% if page_obj.has_previous %}
<li class=" page-item"><a class="continue page-link badge bg-primary rounded-pill" href="?page={{ page_obj.previous_page_number }}">previous «</a></li>
{% else %}
<li class="page-item disabled"><span>«</span></li>
{% endif %}
{% for i in page_obj.paginator.page_range %}
{% if page_obj.number == i %}
<li class="page-item active" aria-current="page"><span><a class="page-link" href="">{{ i }}</a></span></li>
{% else %}
<li class="page-item"><a class="continue page-link" href="?page={{ i }}">{{ i }}</a></li>
{% endif %}
{% endfor %}
{% if page_obj.has_next %}
<li class="page-item"><a class="page-link badge bg-primary rounded-pill" href="?page={{ page_obj.next_page_number }}"> next »</a></li>
{% else %}
<li class="page-item disabled"><span>last » </span></li>
{% endif %}
</ul>
</nav>
</div>