<table class="table table-striped table-bordered">
<tbody>
- {% for answer in answers %}
+ {% for answer in previous.answers %}
{% if answer.correct %}
<tr class="success">
<td>{{ answer.content }}</td>
<tr>
<td>{{ answer.content }}</td>
<td>
- {% if question_type.MCQuestion %}
- {% if answer.id == previous_answer_id %}
+ {% if previous.question_type.MCQuestion %}
+ {% if answer.id|add:"0" == previous.previous_answer|add:"0" %}
This was your answer.
{% endif %}
{% endif %}
</div>
- {% correct_answer previous %}
+ {% include 'correct_answer.html' %}
<p><strong>Explanation:</strong></p>
<div class="well " style="background-color: #fcf8e3;">
{% endif %}
{% if question_type.MCQuestion %}
- {% answers_for_mc_question question %}
+ {% include 'answers_for_mc_question.html' %}
{% endif %}
</tbody>
{{ previous.previous_outcome|yesno:"correct,incorrect" }}
</strong>
</p>
- {% correct_answer previous %}
+ {% include 'correct_answer.html' %}
<p><strong>Explanation:</strong></p>
<div class="well " style="background-color: #fcf8e3;">
<p>{{ previous.previous_question.explanation }}</p>
from django import template
-from multichoice.models import Answer, MCQuestion
-
register = template.Library()
-@register.inclusion_tag('answers_for_mc_question.html', takes_context=True)
-def answers_for_mc_question(context, question):
- return {'answers': Answer.objects.filter(question=question).order_by('?')}
-
-
-@register.inclusion_tag('correct_answer.html', takes_context=True)
-def correct_answer(context, previous):
- """
- processes the correct answer based on the previous question dict
- """
- q = previous['previous_question']
- q_type = q.__class__.__name__
- previous_answer_id = context['previous']['previous_answer']
- if isinstance(q, MCQuestion):
- previous_answer_id = int(previous_answer_id)
- return {'answers': q.get_answers(),
- 'question_type': {q_type: True},
- 'previous_answer_id': previous_answer_id}
-
-
@register.inclusion_tag('correct_answer.html', takes_context=True)
def correct_answer_for_all(context, question):
"""
user_was_incorrect = True
else:
user_was_incorrect = False
- return {'answers': answers, 'user_was_incorrect': user_was_incorrect}
+ previous = {'answers': answers}
+
+ return {'previous': previous,
+ 'user_was_incorrect': user_was_incorrect}
@register.inclusion_tag('user_previous_exam.html', takes_context=True)
self.assertEqual(response.context['percent'], 50)
self.assertIn(self.question1, response.context['questions'])
self.assertIn(self.question3, response.context['questions'])
+
self.assertContains(response, 'above question incorrectly')
self.assertContains(response, 'True')
self.sitting = Sitting.objects.new_sitting(self.user, self.quiz1)
self.sitting.current_score = 1
- def test_answers_mc(self):
- template = Template('{% load quiz_tags %}' +
- '{% answers_for_mc_question question %}')
- context = Context({'question': self.question1})
-
- self.assertTemplateUsed('answers_for_mc_question.html')
- self.assertIn('bing', template.render(context))
-
- def test_correct_answer_MC(self):
- template = Template('{% load quiz_tags %}' +
- '{% correct_answer previous %}')
-
- previous_MC = {'previous_answer': 123,
- 'previous_outcome': 'incorrect',
- 'previous_question': self.question1}
-
- context = Context({'previous': previous_MC})
-
- self.assertTemplateUsed('correct_answer.html')
- self.assertIn('bing', template.render(context))
- self.assertIn('bong', template.render(context))
- self.assertIn('your answer', template.render(context))
-
- def test_correct_answer_TF(self):
- template = Template('{% load quiz_tags %}' +
- '{% correct_answer previous %}')
-
- previous_TF = {'previous_answer': 'T',
- 'previous_outcome': 'correct',
- 'previous_question': self.question2}
-
- context = Context({'previous': previous_TF})
-
- self.assertTemplateUsed('correct_answer.html')
- self.assertIn('True', template.render(context))
- self.assertIn('False', template.render(context))
- self.assertNotIn('your answer', template.render(context))
-
def test_correct_answer_all_anon(self):
template = Template('{% load quiz_tags %}' +
'{% correct_answer_for_all question %}')
from django.views.generic import DetailView, ListView, TemplateView
from .models import Quiz, Category, Progress, Sitting, Question
+from multichoice.models import MCQuestion
class QuizListView(ListView):
if quiz.answers_at_end is not True:
previous = {'previous_answer': guess,
'previous_outcome': is_correct,
- 'previous_question': question}
+ 'previous_question': question,
+ 'answers': question.get_answers(),
+ 'question_type': {question.__class__.__name__: True}}
sitting.remove_first_question()
- next_question = sitting.get_first_question()
- if next_question is False:
+ next_q = sitting.get_first_question()
+ if next_q is False:
# no questions left
return final_result_user(request, sitting, quiz, previous)
- question_type = {next_question.__class__.__name__: True}
-
return render_to_response('question.html',
{'quiz': quiz,
- 'question': next_question,
- 'question_type': question_type,
+ 'question': next_q,
+ 'question_type': {next_q.__class__.__name__:
+ True},
+ 'answers': next_q.get_answers(),
'previous': previous},
context_instance=RequestContext(request))