From 66f595cb5d4de7314a9818ba66b6609112f6fabc Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Fri, 23 Oct 2015 11:27:47 +0100 Subject: [PATCH] edit_current_site redirect should not break when request.site is undefined --- wagtail/contrib/settings/tests/test_admin.py | 12 ++++++++++++ wagtail/contrib/settings/views.py | 4 +++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/wagtail/contrib/settings/tests/test_admin.py b/wagtail/contrib/settings/tests/test_admin.py index 9d9c69489..099ba8ee6 100644 --- a/wagtail/contrib/settings/tests/test_admin.py +++ b/wagtail/contrib/settings/tests/test_admin.py @@ -144,6 +144,18 @@ class TestMultiSite(BaseTestSettingView): response = self.client.get(start_url, follow=True, HTTP_HOST=self.other_site.hostname) self.assertEqual([(dest_url, 302)], response.redirect_chain) + def test_with_no_current_site(self): + """ + Redirection should not break if the current request does not correspond to a site + """ + self.default_site.is_default_site = False + self.default_site.save() + + start_url = reverse('wagtailsettings_edit', args=[ + 'tests', 'testsetting']) + response = self.client.get(start_url, follow=True, HTTP_HOST="noneoftheabove.example.com") + self.assertEqual(302, response.redirect_chain[0][1]) + def test_switcher(self): """ Check that the switcher form exists in the page """ response = self.get() diff --git a/wagtail/contrib/settings/views.py b/wagtail/contrib/settings/views.py index 177ba6204..0f7f50e1d 100644 --- a/wagtail/contrib/settings/views.py +++ b/wagtail/contrib/settings/views.py @@ -34,7 +34,9 @@ def get_setting_edit_handler(model): def edit_current_site(request, app_name, model_name): # Redirect the user to the edit page for the current site - return redirect('wagtailsettings_edit', request.site.pk, app_name, model_name) + # (or the current request does not correspond to a site, the first site in the list) + site = request.site or Site.objects.first() + return redirect('wagtailsettings_edit', site.pk, app_name, model_name) def edit(request, site_pk, app_name, model_name):