summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Phalip <jphalip@gmail.com>2011-12-19 13:36:32 +0000
committerJulien Phalip <jphalip@gmail.com>2011-12-19 13:36:32 +0000
commit355f7fc564cb4dc67a84075664bf98ac203d2b13 (patch)
treeb50267f977467691f38d4793606cfc73b073e275
parent1ef6841cade19b06508f74d8602acee0805e88b5 (diff)
Fixed #17163 -- Added the `NamedUrlWizardView.get_step_url()` method. Thanks, Bradley Ayers.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@17235 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/contrib/formtools/wizard/views.py19
-rw-r--r--docs/ref/contrib/formtools/form-wizard.txt16
2 files changed, 24 insertions, 11 deletions
diff --git a/django/contrib/formtools/wizard/views.py b/django/contrib/formtools/wizard/views.py
index c5fab17f07..aac29bf6ab 100644
--- a/django/contrib/formtools/wizard/views.py
+++ b/django/contrib/formtools/wizard/views.py
@@ -591,6 +591,9 @@ class NamedUrlWizardView(WizardView):
'step name "%s" is reserved for "done" view' % initkwargs['done_step_name']
return initkwargs
+ def get_step_url(self, step):
+ return reverse(self.url_name, kwargs={'step': step})
+
def get(self, *args, **kwargs):
"""
This renders the form or, if needed, does the http redirects.
@@ -604,10 +607,8 @@ class NamedUrlWizardView(WizardView):
query_string = "?%s" % self.request.GET.urlencode()
else:
query_string = ""
- next_step_url = reverse(self.url_name, kwargs={
- 'step': self.steps.current,
- }) + query_string
- return redirect(next_step_url)
+ return redirect(self.get_step_url(self.steps.current)
+ + query_string)
# is the current step the "done" name/view?
elif step_url == self.done_step_name:
@@ -636,7 +637,7 @@ class NamedUrlWizardView(WizardView):
# invalid step name, reset to first and redirect.
else:
self.storage.current_step = self.steps.first
- return redirect(self.url_name, step=self.steps.first)
+ return redirect(self.get_step_url(self.steps.first))
def post(self, *args, **kwargs):
"""
@@ -646,7 +647,7 @@ class NamedUrlWizardView(WizardView):
wizard_goto_step = self.request.POST.get('wizard_goto_step', None)
if wizard_goto_step and wizard_goto_step in self.get_form_list():
self.storage.current_step = wizard_goto_step
- return redirect(self.url_name, step=wizard_goto_step)
+ return redirect(self.get_step_url(wizard_goto_step))
return super(NamedUrlWizardView, self).post(*args, **kwargs)
def get_context_data(self, form, **kwargs):
@@ -665,7 +666,7 @@ class NamedUrlWizardView(WizardView):
"""
next_step = self.get_next_step()
self.storage.current_step = next_step
- return redirect(self.url_name, step=next_step)
+ return redirect(self.get_step_url(next_step))
def render_revalidation_failure(self, failed_step, form, **kwargs):
"""
@@ -673,7 +674,7 @@ class NamedUrlWizardView(WizardView):
step.
"""
self.storage.current_step = failed_step
- return redirect(self.url_name, step=failed_step)
+ return redirect(self.get_step_url(failed_step))
def render_done(self, form, **kwargs):
"""
@@ -681,7 +682,7 @@ class NamedUrlWizardView(WizardView):
name doesn't fit).
"""
if kwargs.get('step', None) != self.done_step_name:
- return redirect(self.url_name, step=self.done_step_name)
+ return redirect(self.get_step_url(self.done_step_name))
return super(NamedUrlWizardView, self).render_done(form, **kwargs)
diff --git a/docs/ref/contrib/formtools/form-wizard.txt b/docs/ref/contrib/formtools/form-wizard.txt
index 58cb0e28d2..a3d9673db9 100644
--- a/docs/ref/contrib/formtools/form-wizard.txt
+++ b/docs/ref/contrib/formtools/form-wizard.txt
@@ -557,8 +557,8 @@ an ``instance_dict`` argument that should contain instances of ``ModelForm`` and
``ModelFormSet``. Similarly to :attr:`~WizardView.initial_dict`, these
dictionary key values should be equal to the step number in the form list.
-Usage of NamedUrlWizardView
-===========================
+Usage of ``NamedUrlWizardView``
+===============================
.. class:: NamedUrlWizardView
@@ -595,3 +595,15 @@ Example code for the changed ``urls.py`` file::
url(r'^contact/(?P<step>.+)/$', contact_wizard, name='contact_step'),
url(r'^contact/$', contact_wizard, name='contact'),
)
+
+Advanced ``NamedUrlWizardView`` methods
+=======================================
+
+.. method:: NamedUrlWizardView.get_step_url(step)
+
+ This method returns the URL for a specific step.
+
+ Default implementation::
+
+ def get_step_url(self, step):
+ return reverse(self.url_name, kwargs={'step': step})