From a43cfc23d44abf6a3fe08e04117d67f7ab5d57bf Mon Sep 17 00:00:00 2001 From: Tom Carrick Date: Sun, 9 Sep 2018 12:35:44 +0100 Subject: [PATCH] Fixed #29746 -- Fixed misleading FlatpageForm URL help text if APPEND_SLASH is disabled. --- django/contrib/flatpages/forms.py | 17 ++++++++++++++--- tests/flatpages_tests/test_forms.py | 10 ++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/django/contrib/flatpages/forms.py b/django/contrib/flatpages/forms.py index d807def77d..4d4b5c80e4 100644 --- a/django/contrib/flatpages/forms.py +++ b/django/contrib/flatpages/forms.py @@ -22,6 +22,19 @@ class FlatpageForm(forms.ModelForm): model = FlatPage fields = '__all__' + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + if not self._trailing_slash_required(): + self.fields['url'].help_text = _( + "Example: '/about/contact'. Make sure to have a leading slash." + ) + + def _trailing_slash_required(self): + return ( + settings.APPEND_SLASH and + 'django.middleware.common.CommonMiddleware' in settings.MIDDLEWARE + ) + def clean_url(self): url = self.cleaned_data['url'] if not url.startswith('/'): @@ -29,9 +42,7 @@ class FlatpageForm(forms.ModelForm): gettext("URL is missing a leading slash."), code='missing_leading_slash', ) - if (settings.APPEND_SLASH and - 'django.middleware.common.CommonMiddleware' in settings.MIDDLEWARE and - not url.endswith('/')): + if self._trailing_slash_required() and not url.endswith('/'): raise forms.ValidationError( gettext("URL is missing a trailing slash."), code='missing_trailing_slash', diff --git a/tests/flatpages_tests/test_forms.py b/tests/flatpages_tests/test_forms.py index 2a4bb0679a..ce9bf449ce 100644 --- a/tests/flatpages_tests/test_forms.py +++ b/tests/flatpages_tests/test_forms.py @@ -49,6 +49,11 @@ class FlatpageAdminFormTests(TestCase): def test_flatpage_requires_trailing_slash_with_append_slash(self): form = FlatpageForm(data=dict(url='/no_trailing_slash', **self.form_data)) with translation.override('en'): + self.assertEqual( + form.fields['url'].help_text, + "Example: '/about/contact/'. Make sure to have leading and " + "trailing slashes." + ) self.assertFalse(form.is_valid()) self.assertEqual(form.errors['url'], ["URL is missing a trailing slash."]) @@ -56,6 +61,11 @@ class FlatpageAdminFormTests(TestCase): def test_flatpage_doesnt_requires_trailing_slash_without_append_slash(self): form = FlatpageForm(data=dict(url='/no_trailing_slash', **self.form_data)) self.assertTrue(form.is_valid()) + with translation.override('en'): + self.assertEqual( + form.fields['url'].help_text, + "Example: '/about/contact'. Make sure to have a leading slash." + ) def test_flatpage_admin_form_url_uniqueness_validation(self): "The flatpage admin form correctly enforces url uniqueness among flatpages of the same site"