]> git.parisson.com Git - django_quiz.git/commitdiff
cleaning up code, improving the default template
authorTom Walker <tomwalker0472@gmail.com>
Sun, 27 Jul 2014 21:14:57 +0000 (22:14 +0100)
committerTom Walker <tomwalker0472@gmail.com>
Sun, 27 Jul 2014 21:14:57 +0000 (22:14 +0100)
quiz/models.py
quiz/templates/quiz/quiz_list.html
quiz/templates/quiz/sitting_detail.html
quiz/tests.py
quiz/views.py

index b52e33c5289ea092aec148a625cb550f50b7db0f..d6b97e553c01d79b2447121947d6a0cf6f282a32 100644 (file)
@@ -425,6 +425,7 @@ class Sitting(models.Model):
         self.user_answers = json.dumps(current)
         self.save()
 
+    @property
     def questions_with_user_answers(self):
         output = {}
         user_answers = json.loads(self.user_answers)
index f0e0fda6995364687e5f7a3ca8d02d133ae2ebe9..409958192a52330cac273fce8bf721340858b36d 100644 (file)
@@ -4,12 +4,39 @@
 {% block content %}
 <h2>List of quizzes</h2>
     {% if quiz_list %}
-        <ul>
+               <table class="table table-bordered table-striped">
+
+                 <thead>
+                       <tr>
+                         <th>Title</th>
+                         <th>Category</th>
+                         <th>Exam</th>
+                         <th>Single attempt</th>
+                         <th></th>
+                       </tr>
+                 </thead>
+
+                 <tbody>
+
         {% for quiz in quiz_list %}
-            <li><a href="{% url 'quiz_start_page' slug=quiz.url %}">{{ quiz.title }}</a></li>
+
+                       <tr>
+                         <td>{{ quiz.title }}</td>
+                         <td>{{ quiz.category }}</td>
+                         <td>{{ quiz.exam_paper }}</td>
+                         <td>{{ quiz.single_attempt }}</td>
+                         <td>
+                               <a href="{% url 'quiz_start_page' slug=quiz.url %}">
+                                 View details
+                               </a>
+                       </tr>
+
         {% endfor %}
-        </ul>
-    {% else %}
+                 </tbody>
+
+               </table>
+
+       {% else %}
         <p>There are no available quizzes.</p>
     {% endif %}
 {% endblock %}
index 254dfb5c64ca7115108607556a3a77de082774a7..1812dcfa4da76db7e470763a132da28f7810395d 100644 (file)
@@ -23,13 +23,13 @@ Result of {{ sitting.quiz.title }} for {{ sitting.user }}
   </thead>
 
   <tbody>
-{% for question, user_name in questions.items %}
+{% for question, user_name in sitting.questions_with_user_answers.items %}
 
        <tr>
          <td>{{ question.content }}</td>
          <td>{{ user_name }}</td>
          <td>
-               {% if question.id in incorrect %}
+               {% if question.id in sitting.get_incorrect_questions %}
                  <p>incorrect</p>
                {% else %}
                  <p>Correct</p>
index 55c8d35cc7fff05c2e1d00b2de4d859f52f21242..8800d483440147dee8ff06b0255d6f78c71ece3a 100644 (file)
@@ -265,7 +265,7 @@ class TestSitting(TestCase):
         self.sitting.add_user_answer(self.question1, '123')
         self.sitting.add_user_answer(self.question2, '456')
 
-        user_answers = self.sitting.questions_with_user_answers()
+        user_answers = self.sitting.questions_with_user_answers
         self.assertEqual('123', user_answers[self.question1])
         self.assertEqual('456', user_answers[self.question2])
 
index f7e5895bbdf3c2a3cc5d95021e066ce018d5e94a..e22b19423ab67c908fe14c4429d2f0c6a4d41f92 100644 (file)
@@ -17,6 +17,15 @@ class QuizMarkerMixin(object):
     def dispatch(self, *args, **kwargs):
         return super(QuizMarkerMixin, self).dispatch(*args, **kwargs)
 
+class QuizFilterByTitleMixin(object):
+    def get_queryset(self):
+        queryset = super(QuizFilterByTitleMixin, self).get_queryset()
+        quiz_filter = self.request.GET.get('quiz_filter')
+        if quiz_filter:
+            queryset = queryset.filter(quiz__title__icontains=quiz_filter)
+
+        return queryset
+
 
 class QuizListView(ListView):
     model = Quiz
@@ -72,12 +81,9 @@ class QuizUserProgressView(TemplateView):
         return context
 
 
-class QuizMarkingList(QuizMarkerMixin, ListView):
+class QuizMarkingList(QuizMarkerMixin, QuizFilterByTitleMixin, ListView):
     model = Sitting
 
-    def dispatch(self, request, *args, **kwargs):
-        return super(QuizMarkingList, self).dispatch(request, *args, **kwargs)
-
     def get_queryset(self):
         queryset = super(QuizMarkingList, self).get_queryset()\
                                                .filter(complete=True)
@@ -86,10 +92,6 @@ class QuizMarkingList(QuizMarkerMixin, ListView):
         if user_filter:
             queryset = queryset.filter(user__username__icontains=user_filter)
 
-        quiz_filter = self.request.GET.get('quiz_filter')
-        if quiz_filter:
-            queryset = queryset.filter(quiz__title__icontains=quiz_filter)
-
         return queryset
 
 
@@ -109,12 +111,6 @@ class QuizMarkingDetail(QuizMarkerMixin, DetailView):
 
         return sitting
 
-    def get_context_data(self, **kwargs):
-        context = super(QuizMarkingDetail, self).get_context_data(**kwargs)
-        context['questions'] = context['object'].questions_with_user_answers()
-        context['incorrect'] = context['object'].get_incorrect_questions
-        return context
-
 
 class QuizTake(FormView):
     form_class = QuestionForm
@@ -123,7 +119,7 @@ class QuizTake(FormView):
     def dispatch(self, request, *args, **kwargs):
         self.quiz = get_object_or_404(Quiz, url=self.kwargs['quiz_name'])
 
-        if request.user.is_authenticated() is True:
+        if request.user.is_authenticated():
             self.sitting = user_sitting(request, self.quiz)
         else:
             self.sitting = anon_load_sitting(request, self.quiz)