Fixed #27238 -- Disabled check_pattern_startswith_slash if settings.APPEND_SLASH=False.

Thanks strycore for the report and timgraham for suggesting the
solution.
This commit is contained in:
Alasdair Nicol 2016-09-19 21:18:41 +01:00 committed by Tim Graham
parent 1a9f6db5ff
commit 911d9f4ed1
3 changed files with 17 additions and 0 deletions

View File

@ -95,6 +95,10 @@ def check_pattern_startswith_slash(pattern):
Check that the pattern does not begin with a forward slash. Check that the pattern does not begin with a forward slash.
""" """
regex_pattern = pattern.regex.pattern regex_pattern = pattern.regex.pattern
if not settings.APPEND_SLASH:
# Skip check as it can be useful to start a URL pattern with a slash
# when APPEND_SLASH=False.
return []
if regex_pattern.startswith('/') or regex_pattern.startswith('^/'): if regex_pattern.startswith('/') or regex_pattern.startswith('^/'):
warning = Warning( warning = Warning(
"Your URL pattern {} has a regex beginning with a '/'. Remove this " "Your URL pattern {} has a regex beginning with a '/'. Remove this "

View File

@ -14,3 +14,6 @@ Bugfixes
* Allowed combining ``contrib.postgres.search.SearchQuery`` with more than one * Allowed combining ``contrib.postgres.search.SearchQuery`` with more than one
``&`` or ``|`` operators (:ticket:`27143`). ``&`` or ``|`` operators (:ticket:`27143`).
* Disabled system check for URL patterns beginning with a '/' when
``APPEND_SLASH=False`` (:ticket:`27238`).

View File

@ -55,6 +55,16 @@ class CheckUrlsTest(SimpleTestCase):
self.assertIn(expected_msg, warning.msg) self.assertIn(expected_msg, warning.msg)
@override_settings(
ROOT_URLCONF='check_framework.urls.beginning_with_slash',
APPEND_SLASH=False,
)
def test_beginning_with_slash_append_slash(self):
# It can be useful to start a URL pattern with a slash when
# APPEND_SLASH=False (#27238).
result = check_url_config(None)
self.assertEqual(result, [])
@override_settings(ROOT_URLCONF='check_framework.urls.name_with_colon') @override_settings(ROOT_URLCONF='check_framework.urls.name_with_colon')
def test_name_with_colon(self): def test_name_with_colon(self):
result = check_url_config(None) result = check_url_config(None)