From: Tom Walker Date: Sat, 12 Jul 2014 21:23:56 +0000 (+0100) Subject: Removing everything I can from template tags, putting them into models or views.... X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=d702b42711051756d5a1cff9c6dd936ccf9188fd;p=django_quiz.git Removing everything I can from template tags, putting them into models or views. Found a useful little hack when comparing integers and strings in templates: http://victorelu.com/blog/comparing-string-with-integer-in-djangos-template/ --- diff --git a/quiz/templates/correct_answer.html b/quiz/templates/correct_answer.html index 65b1e77..b24eeb8 100644 --- a/quiz/templates/correct_answer.html +++ b/quiz/templates/correct_answer.html @@ -6,7 +6,7 @@ - {% for answer in answers %} + {% for answer in previous.answers %} {% if answer.correct %} @@ -15,8 +15,8 @@ diff --git a/quiz/templates/result.html b/quiz/templates/result.html index 4338974..ca9ecb7 100644 --- a/quiz/templates/result.html +++ b/quiz/templates/result.html @@ -18,7 +18,7 @@ {{ previous.previous_outcome|yesno:"correct,incorrect" }}

- {% correct_answer previous %} + {% include 'correct_answer.html' %}

Explanation:

{{ previous.previous_question.explanation }}

diff --git a/quiz/templatetags/quiz_tags.py b/quiz/templatetags/quiz_tags.py index f226bd0..35968f6 100644 --- a/quiz/templatetags/quiz_tags.py +++ b/quiz/templatetags/quiz_tags.py @@ -1,30 +1,8 @@ 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): """ @@ -37,7 +15,10 @@ 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) diff --git a/quiz/tests.py b/quiz/tests.py index 95a1b3c..768a7ce 100644 --- a/quiz/tests.py +++ b/quiz/tests.py @@ -566,6 +566,7 @@ class TestQuestionViewsUser(TestCase): 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') @@ -630,44 +631,6 @@ class TestTemplateTags(TestCase): 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 %}') diff --git a/quiz/views.py b/quiz/views.py index 3070806..1b11eed 100644 --- a/quiz/views.py +++ b/quiz/views.py @@ -7,6 +7,7 @@ from django.utils.decorators import method_decorator from django.views.generic import DetailView, ListView, TemplateView from .models import Quiz, Category, Progress, Sitting, Question +from multichoice.models import MCQuestion class QuizListView(ListView): @@ -115,21 +116,23 @@ def user_load_next_question(request, sitting, quiz): 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))
{{ answer.content }}
{{ answer.content }} - {% 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 %} diff --git a/quiz/templates/question.html b/quiz/templates/question.html index ca4d331..68b7ac9 100644 --- a/quiz/templates/question.html +++ b/quiz/templates/question.html @@ -29,7 +29,7 @@ - {% correct_answer previous %} + {% include 'correct_answer.html' %}

Explanation:

@@ -62,7 +62,7 @@ {% endif %} {% if question_type.MCQuestion %} - {% answers_for_mc_question question %} + {% include 'answers_for_mc_question.html' %} {% endif %}