]> git.parisson.com Git - django_quiz.git/commitdiff
cleaned up
authorTom Walker <tomwalker0472@gmail.com>
Tue, 11 Feb 2014 16:45:07 +0000 (16:45 +0000)
committerTom Walker <tomwalker0472@gmail.com>
Tue, 11 Feb 2014 16:45:07 +0000 (16:45 +0000)
multichoice/models.py
quiz/admin.py
quiz/models.py
quiz/templatetags/quiz_tags.py
quiz/urls.py
quiz/views.py

index 56efd9fe68fee1d41323f3392c8950cfcbeff212..fbef01e788184abab46fc47b758c4167e8ce63a2 100644 (file)
@@ -49,4 +49,4 @@ class Answer(models.Model):
                                   )
     
     def __unicode__(self):
-        return self.content
\ No newline at end of file
+        return self.content
index 2ad345eb143bfd33744b645b95d0e3b54fb95770..de383b6355367c1facff7a5fff9cea2013a6b44f 100644 (file)
@@ -1,8 +1,8 @@
 from django import forms
 from django.contrib import admin
 from django.contrib.admin.widgets import FilteredSelectMultiple
-from quiz.models import Quiz, Category, Progress
-from multichoice.models import Question, Answer
+from django_quiz.quiz.models import Quiz, Category, Progress
+from django_quiz.multichoice.models import Question, Answer
 
 class QuestionInline(admin.TabularInline):
     model = Question.quiz.through
@@ -77,4 +77,4 @@ class ProgressAdmin(admin.ModelAdmin):
 admin.site.register(Quiz, QuizAdmin)
 admin.site.register(Category, CategoryAdmin)
 admin.site.register(Question, QuestionAdmin)
-admin.site.register(Progress, ProgressAdmin)
\ No newline at end of file
+admin.site.register(Progress, ProgressAdmin)
index d981b9d24a1857fd3db5d40a702421818b679e88..b674449813b7b8adc8292f8f155b7c0e65c4eab3 100644 (file)
@@ -174,7 +174,10 @@ class Progress(models.Model):
             if match:
                 score = int(match.group(1))
                 possible = int(match.group(2))
-                percent = int(round((float(score) / float(possible)) * 100))
+                try:
+                    percent = int(round((float(score) / float(possible)) * 100))
+                except:
+                    percent = 0
                 score_list = [score, possible, percent]
                 output[cat.category] = score_list
             
@@ -272,12 +275,10 @@ class Progress(models.Model):
         """
         finds the previous exams marked as 'exam papers'
         
-        returns a queryset of the exams
+        returns a queryset of complete exams
         """
-        
-        exams = Sitting.objects.filter(user=self.user).filter(complete=True)  #  list of exam objects from user that are complete
-        return exams
-
+        #  list of exam objects from user that are complete
+        return Sitting.objects.filter(user=self.user).filter(complete=True)
 
 
 class SittingManager(models.Manager):
@@ -414,4 +415,4 @@ class Sitting(models.Model):
         """
         question_list = self.incorrect_questions  #  string of question IDs as CSV  ie 32,19,22,3,75
         split_questions = question_list.split(',')  # list of strings ie [32,19,22,3,75]
-        return split_questions
\ No newline at end of file
+        return split_questions
index cc6d2c11b620fc3f7fa600307de88d36439da246..314311c64b9ccd6fb04f1ba272b5265f47469184 100644 (file)
@@ -34,10 +34,22 @@ def correct_answer_for_all_with_users_incorrect(context, question, incorrect_lis
     processes the correct answer based on a given question object
     if the answer is incorrect, informs the user
     """
-    answers = Answer.objects.filter(question__id=question.id)  #  if question was answered wrongly, tell the user
+    answers = Answer.objects.filter(question__id=question.id)
     question_id = str(question.id)
     if question_id in incorrect_list:
         user_was_incorrect = True
     else:
         user_was_incorrect = False
-    return {'answers': answers, 'user_was_incorrect': user_was_incorrect, }
\ No newline at end of file
+    return {'answers': answers, 'user_was_incorrect': user_was_incorrect, }
+
+@register.inclusion_tag('user_previous_exam.html', takes_context=True)
+def user_previous_exam(context, exam):
+    """
+    Provides details of finished exams
+    """
+    title = exam.quiz.title
+    final_score = exam.current_score
+    possible_score = exam.quiz.question_set.count()
+    percent = int(round((float(final_score) / float(possible_score)) * 100))
+    return {'title': title, 'score': final_score,
+            'possible': possible_score, 'percent': percent, }
index d120d842f78e367e0b3792b000fdafe1e4811e27..e2aaddcc4481e7fd38a0ab6fbb35a03cee4b2852 100644 (file)
@@ -8,10 +8,17 @@ urlpatterns = patterns('',
 
     
     #  passes variable 'quiz_name' to quiz_take view
-    url(r'^(?P<quiz_name>[\w-]+)/$', 'quiz.views.quiz_take'),  #  quiz/
-    url(r'^(?P<quiz_name>[\w-]+)$', 'quiz.views.quiz_take'),  #  quiz
-    url(r'^(?P<quiz_name>[\w-]+)/take/$', 'quiz.views.quiz_take')  #  quiz/take/
-    url(r'^(?P<quiz_name>[\w-]+)take$', 'quiz.views.quiz_take')  #  quiz/take
+    url(r'^(?P<quiz_name>[\w-]+)/$',
+        'quiz.views.quiz_take'),  #  quiz/
+
+    url(r'^(?P<quiz_name>[\w-]+)$',
+        'quiz.views.quiz_take'),  #  quiz
+
+    url(r'^(?P<quiz_name>[\w-]+)/take/$',
+        'quiz.views.quiz_take'),  #  quiz/take/
+
+    url(r'^(?P<quiz_name>[\w-]+)take$',
+        'quiz.views.quiz_take')  #  quiz/take
 
 
 
index d45c78007eb56f33beae19517199a16722ad3f4d..e7d70f99c2cbd497c77a62913c4b8762a61b0f3a 100644 (file)
@@ -47,7 +47,8 @@ def quiz_take(request, quiz_name):
     2. Decides whether this is the start of a new quiz. 
     """
     
-    quiz = Quiz.objects.get(url=quiz_name.lower())  #  url refers to the SEO friendly url specified in model.quiz
+    quiz = Quiz.objects.get(url=quiz_name.lower())
+    #  url refers to the SEO friendly url specified in model.quiz
     
     if request.user.is_authenticated() == True:  #  logged in user
         try:
@@ -76,8 +77,9 @@ def quiz_take(request, quiz_name):
     else:  #  anon user
         quiz_id = str(quiz.id)
         q_list = quiz_id + "_q_list"
-        
-        if q_list in request.session:  #  check if anon user has a recent session for this quiz
+
+        #  check if anon user has a recent session for this quiz
+        if q_list in request.session:  
             return load_anon_next_question(request, quiz)  #  load up previous session
         else:
             return new_anon_quiz_session(request, quiz)  #  new session for anon user
@@ -93,7 +95,8 @@ def new_anon_quiz_session(request, quiz):
     questions = quiz.question_set.all()
     question_list = []
     for question in questions:
-        question_list.append(question.id)  #  question_list is a list of question IDs, which are integers
+        #  question_list is a list of question IDs, which are integers        
+        question_list.append(question.id)
     
     if quiz.random_order == True:
         random.shuffle(question_list)
@@ -111,6 +114,7 @@ def new_anon_quiz_session(request, quiz):
     
     return load_anon_next_question(request, quiz)
 
+
 def user_new_quiz_session(request, quiz):
     """
     initialise the Sitting class
@@ -121,9 +125,8 @@ def user_new_quiz_session(request, quiz):
         request.session['page_count'] = int(0)  #  session page count for adverts
     
     return user_load_next_question(request, sitting, quiz)
-    
-    
 
+    
 def load_anon_next_question(request, quiz):
     """
     load up the next question, including the outcome of the previous question
@@ -135,13 +138,14 @@ def load_anon_next_question(request, quiz):
     
     if 'guess' in request.GET and request.GET['guess']:
         #  if there has been a previous question
-        previous = question_check_anon(request, quiz)  #  returns a dictionary with previous question details
-        
+        #  returns a dictionary with previous question details
+        previous = question_check_anon(request, quiz)
+
         question_list = question_list[1:]  #  move onto next question
         request.session[q_list] = question_list
         
         counter = request.session['page_count']
-        request.session['page_count'] = counter + 1  #  add 1 to the page counter     
+        request.session['page_count'] = counter + 1  #  add 1 to the page counter
     
     if not request.session[q_list]:
         #  no questions left!
@@ -149,15 +153,21 @@ def load_anon_next_question(request, quiz):
 
     show_advert = False
     
-    try:
-        if request.session['page_count'] > 0 and request.session['page_count'] % 10 == 0:
-            #  advert page every 10 questions
-            counter = request.session['page_count']
-            request.session['page_count'] = counter + 1  #  add 1 to the page counter
-            show_advert = True
+    """
+    This is a counter that allows you to add something into the template every
+    X amount of pages. In my original site, I used this to show a full page
+    advert every 10 pages.
+    """
+
+    # try:
+    #     if request.session['page_count'] > 0 and request.session['page_count'] % 10 == 0:
+    #         #  advert page every 10 questions
+    #         counter = request.session['page_count']
+    #         request.session['page_count'] = counter + 1  #  add 1 to the page counter
+    #         show_advert = True
     
-    except KeyError:
-        request.session['page_count'] = int(0)  #  since one hasnt been started, make it now
+    except KeyError:
+        request.session['page_count'] = int(0)  #  since one hasnt been started, make it now
     
     next_question_id = question_list[0]
     question = Question.objects.get(id=next_question_id)
@@ -169,7 +179,7 @@ def load_anon_next_question(request, quiz):
                                'show_advert': show_advert,
                                }, 
                               context_instance=RequestContext(request))
-    
+
 
 def user_load_next_question(request, sitting, quiz):
     """
@@ -179,33 +189,34 @@ def user_load_next_question(request, sitting, quiz):
     
     if 'guess' in request.GET and request.GET['guess']:
         #  if there has been a previous question
-        previous = question_check_user(request, quiz, sitting)  #  returns a dictionary with previous question details
+        #  returns a dictionary with previous question details
+        previous = question_check_user(request, quiz, sitting)  
         sitting.remove_first_question()  #  remove the first question
         
         counter = request.session['page_count']
         request.session['page_count'] = counter + 1  #  add 1 to the page counter
-    
+
     question_ID = sitting.get_next_question()
-    
+
     if question_ID == False:
         #  no questions left
         return final_result_user(request, sitting, previous)
 
     show_advert = False
     
-    try:
-        if request.session['page_count'] > 0 and request.session['page_count'] % 10 == 0:
-            #  advert page every 10 questions
-            counter = request.session['page_count']
-            request.session['page_count'] = counter + 1  #  add 1 to the page counter
-            show_advert = True
-    
-    except KeyError:
-        request.session['page_count'] = int(0)  #  since one hasnt been started, make it now
+    # try:
+    #     if request.session['page_count'] > 0 and request.session['page_count'] % 10 == 0:
+    #         #  advert page every 10 questions
+    #         counter = request.session['page_count']
+    #         request.session['page_count'] = counter + 1  #  add 1 to the page counter
+    #         show_advert = True
     
+    # except KeyError:
+    #     request.session['page_count'] = int(0)  #  since one hasnt been started, make it now
+
 
     next_question = Question.objects.get(id=question_ID)
-    
+
     return render_to_response('question.html', 
                               {'quiz': quiz,
                                'question': next_question,
@@ -214,7 +225,7 @@ def user_load_next_question(request, sitting, quiz):
                                }, 
                               context_instance=RequestContext(request)
                               )
-    
+
 
 def final_result_anon(request, quiz, previous):
     """
@@ -233,7 +244,7 @@ def final_result_anon(request, quiz, previous):
     
     session_score, session_possible = anon_session_score(request)
     
-    if quiz.answers_at_end != True:  #  if answer was shown after each question
+    if quiz.answers_at_end == False:  #  if answer was shown after each question
         return render_to_response('result.html',
                                   {
                                    'score': score, 
@@ -259,6 +270,7 @@ def final_result_anon(request, quiz, previous):
                                   context_instance=RequestContext(request)
                                   )
 
+
 def final_result_user(request, sitting, previous):
     """
     The result page for a logged in user
@@ -274,7 +286,7 @@ def final_result_user(request, sitting, previous):
     if quiz.exam_paper == False:  #  if we do not plan to store the outcome
         sitting.delete()  #  delete the sitting to free up DB space
     
-    if quiz.answers_at_end != True:  #  answer was shown after each question
+    if quiz.answers_at_end == False:  #  answer was shown after each question
         return render_to_response('result.html',
                                   {
                                    'quiz': quiz,
@@ -302,7 +314,8 @@ def final_result_user(request, sitting, previous):
 
 def question_check_anon(request, quiz):
     """
-    check if a question is correct, adds to score if needed and return the previous questions details
+    check if a question is correct, adds to score if needed
+    and return the previous questions details
     """
     quiz_id = str(quiz.id)
     guess = request.GET['guess']
@@ -322,22 +335,26 @@ def question_check_anon(request, quiz):
         anon_session_score(request, 0, 1)
         
     if quiz.answers_at_end != True:  #  display answer after each question
-        return {'previous_answer': answer, 'previous_outcome': outcome, 'previous_question': question, }
+        return {'previous_answer': answer,
+                'previous_outcome': outcome, 'previous_question': question, }
+    
     else:  #  display all answers at end
         return {}
 
+
 def question_check_user(request, quiz, sitting):
     """
-    check if a question is correct, adds to score if needed and return the previous questions details
+    check if a question is correct, adds to score if needed
+    and return the previous questions details
     """
     quiz_id = str(quiz.id)
     guess = request.GET['guess']  #  id of the guessed answer
     answer = Answer.objects.get(id=guess)
-    question = answer.question  #  the question object (only 1 question related to an answer)
+    question = answer.question  #  question object (only question related to an answer)
     
     if answer.correct == True:
         outcome = "correct"
-        sitting.add_to_score(1)  #  add 1 to sitting score.  to do: allow variable point values
+        sitting.add_to_score(1)  #  add 1 to sitting score.
         user_progress_score_update(request, question.category, 1, 1)
     else:
         outcome = "incorrect"
@@ -345,9 +362,11 @@ def question_check_user(request, quiz, sitting):
         user_progress_score_update(request, question.category, 0, 1)
     
     if quiz.answers_at_end != True:  #  display answer after each question
-        return {'previous_answer': answer, 'previous_outcome': outcome, 'previous_question': question, }
+        return {'previous_answer': answer,
+                'previous_outcome': outcome, 'previous_question': question, }
     else:  #  display all answers at end
-        return {}    
+        return {}
+
 
 def user_progress_score_update(request, category, score, possible):
     """
@@ -361,7 +380,7 @@ def user_progress_score_update(request, category, score, possible):
         progress = Progress.objects.new_progress(request.user)
         
     progress.update_score(category, score, possible)
-    
+
 
 def anon_session_score(request, add=0, possible=0):
     """
@@ -411,19 +430,21 @@ def progress(request):
         
         
     except Progress.DoesNotExist:
-        #  viewing progress for first time. Most likely just signed up as redirect to progress after signup
-        #  no current progress object, make one
+        # viewing progress for first time.
+        # Most likely just signed up as redirect to progress after signup
+        # no current progress object, make one
         progress = Progress.objects.new_progress(request.user)
         return render_to_response('progress.html',
                               {'new_user': True,},
                               context_instance=RequestContext(request)
                               )
         
-    cat_scores = progress.list_all_cat_scores()  #  dict {category name: list of three integers [score, possible, percent]}
+    cat_scores = progress.list_all_cat_scores()
+    # dict {category name: list of three integers [score, possible, percent]}
     
     exams = progress.show_exams()  #  queryset of the exams a user has sat
     
     return render_to_response('progress.html',
                               {'cat_scores': cat_scores, 'exams': exams},
                               context_instance=RequestContext(request)
-                              )
\ No newline at end of file
+                              )