diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index 4e77d79ab6..7789ced099 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -9,6 +9,7 @@ Changelog
* Added `before_copy_page` and `after_copy_page` hooks (Matheus Bratfisch)
* View live / draft links in the admin now consistently open in a new window (Marco Fucci)
* `ChoiceBlock` now omits the blank option if the block is required and has a default value (Andreas Nüßlein)
+ * The `add_subpage` view now maintains a `next` URL parameter to specify where to redirect to after completing page creation (Robert Rollins)
* Fix: Help text for StreamField is now visible and does not cover block controls (Stein Strindhaug)
* Fix: "X minutes ago" timestamps are now marked for translation (Janneke Janssen, Matt Westcott)
diff --git a/docs/releases/1.9.rst b/docs/releases/1.9.rst
index 9c9802317c..b1d0a7b657 100644
--- a/docs/releases/1.9.rst
+++ b/docs/releases/1.9.rst
@@ -28,6 +28,7 @@ Other features
* Added :ref:`before_copy_page` and :ref:`after_copy_page` hooks (Matheus Bratfisch)
* View live / draft links in the admin now consistently open in a new window (Marco Fucci)
* ``ChoiceBlock`` now omits the blank option if the block is required and has a default value (Andreas Nüßlein)
+ * The ``add_subpage`` view now maintains a ``next`` URL parameter to specify where to redirect to after completing page creation (Robert Rollins)
Bug fixes
diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/pages/add_subpage.html b/wagtail/wagtailadmin/templates/wagtailadmin/pages/add_subpage.html
index e223cd66ff..0104c929c1 100644
--- a/wagtail/wagtailadmin/templates/wagtailadmin/pages/add_subpage.html
+++ b/wagtail/wagtailadmin/templates/wagtailadmin/pages/add_subpage.html
@@ -17,7 +17,7 @@
diff --git a/wagtail/wagtailadmin/tests/test_pages_views.py b/wagtail/wagtailadmin/tests/test_pages_views.py
index b3ff6acf51..e9cd029b73 100644
--- a/wagtail/wagtailadmin/tests/test_pages_views.py
+++ b/wagtail/wagtailadmin/tests/test_pages_views.py
@@ -421,6 +421,8 @@ class TestPageCreation(TestCase, WagtailTestUtils):
self.assertEqual(response.status_code, 200)
self.assertContains(response, "Simple page")
+ target_url = reverse('wagtailadmin_pages:add', args=('tests', 'simplepage', self.root_page.id))
+ self.assertContains(response, 'href="%s"' % target_url)
# List of available page types should not contain pages with is_creatable = False
self.assertNotContains(response, "MTI base page")
# List of available page types should not contain abstract pages
@@ -481,6 +483,17 @@ class TestPageCreation(TestCase, WagtailTestUtils):
response = self.client.get(reverse('wagtailadmin_pages:add_subpage', args=(100000, )))
self.assertEqual(response.status_code, 404)
+ def test_add_subpage_with_next_param(self):
+ response = self.client.get(
+ reverse('wagtailadmin_pages:add_subpage', args=(self.root_page.id, )),
+ {'next': '/admin/users/'}
+ )
+ self.assertEqual(response.status_code, 200)
+
+ self.assertContains(response, "Simple page")
+ target_url = reverse('wagtailadmin_pages:add', args=('tests', 'simplepage', self.root_page.id))
+ self.assertContains(response, 'href="%s?next=/admin/users/"' % target_url)
+
def test_create_simplepage(self):
response = self.client.get(reverse('wagtailadmin_pages:add', args=('tests', 'simplepage', self.root_page.id)))
self.assertEqual(response.status_code, 200)
diff --git a/wagtail/wagtailadmin/views/pages.py b/wagtail/wagtailadmin/views/pages.py
index 9f0ff21c12..c2809e0607 100644
--- a/wagtail/wagtailadmin/views/pages.py
+++ b/wagtail/wagtailadmin/views/pages.py
@@ -127,6 +127,7 @@ def add_subpage(request, parent_page_id):
return render(request, 'wagtailadmin/pages/add_subpage.html', {
'parent_page': parent_page,
'page_types': page_types,
+ 'next': get_valid_next_url_from_request(request),
})