diff --git a/questionnaire/utils.py b/questionnaire/utils.py index 341273a..f02b214 100644 --- a/questionnaire/utils.py +++ b/questionnaire/utils.py @@ -46,6 +46,15 @@ def get_runid_from_request(request): string_chunks = request_string.split('/') return string_chunks[2] +def get_sortid_from_request(request): + request_string = str(request) + string_chunks = request_string.split('/') + if len(string_chunks) > 3: + return string_chunks[3] + + #not enough string chunks to get a sortid + return None + if __name__ == "__main__": import doctest doctest.testmod() diff --git a/questionnaire/views.py b/questionnaire/views.py index 759935d..66074d7 100644 --- a/questionnaire/views.py +++ b/questionnaire/views.py @@ -18,7 +18,7 @@ from questionnaire import Processors from questionnaire.models import * from questionnaire.parsers import * from questionnaire.emails import _send_email, send_emails -from questionnaire.utils import numal_sort, split_numal +from questionnaire.utils import numal_sort, split_numal, get_sortid_from_request from questionnaire.request_cache import request_cache from questionnaire.dependency_checker import dep_check from questionnaire import profiler @@ -288,6 +288,7 @@ def redirect_to_qs(runinfo, request=None): request.session['qs'] = runinfo.questionset.sortid request.session['runcode'] = runinfo.random urlname = 'questionnaire' + url = reverse(urlname, args=args) return HttpResponseRedirect(url) @@ -344,7 +345,7 @@ def questionnaire(request, runcode=None, qs=None): else: request.session['runcode'] = runcode args = [] - + return HttpResponseRedirect(reverse("questionnaire", args=args)) @@ -629,7 +630,14 @@ def show_questionnaire(request, runinfo, errors={}): if use_session: prev_url = reverse('redirect_to_prev_questionnaire') else: + sortid = get_sortid_from_request(request) + + #testing shows that if this conditional block is run at all, it means there is a reasonable prev_url, so the following + #line should always be overridden. Should an assert verify that that's always the case? prev_url = 'javascript:history.back();' + if not sortid == None and int(sortid) > 1: + args = [runinfo.random, int(sortid)-1] + prev_url = reverse('questionset', args=args) current_answers = [] if debug_questionnaire: