Clarified URL regex check message with respect to include().

This commit is contained in:
Riccardo Magliocchetti 2016-09-01 15:39:56 +02:00 committed by Tim Graham
parent 6b54504e66
commit 7ed8b98f42
3 changed files with 14 additions and 3 deletions

View File

@ -97,8 +97,11 @@ def check_pattern_startswith_slash(pattern):
regex_pattern = pattern.regex.pattern regex_pattern = pattern.regex.pattern
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 '/'. " "Your URL pattern {} has a regex beginning with a '/'. Remove this "
"Remove this slash as it is unnecessary.".format(describe_pattern(pattern)), "slash as it is unnecessary. If this pattern is targeted in an "
"include(), ensure the include() pattern has a trailing '/'.".format(
describe_pattern(pattern)
),
id="urls.W002", id="urls.W002",
) )
return [warning] return [warning]

View File

@ -657,6 +657,8 @@ The following checks are performed on your URL configuration:
including URLs. including URLs.
* **urls.W002**: Your URL pattern ``<pattern>`` has a ``regex`` * **urls.W002**: Your URL pattern ``<pattern>`` has a ``regex``
beginning with a ``/``. Remove this slash as it is unnecessary. beginning with a ``/``. Remove this slash as it is unnecessary.
If this pattern is targeted in an :func:`~django.conf.urls.include`, ensure
the :func:`~django.conf.urls.include` pattern has a trailing ``/``.
* **urls.W003**: Your URL pattern ``<pattern>`` has a ``name`` * **urls.W003**: Your URL pattern ``<pattern>`` has a ``name``
including a ``:``. Remove the colon, to avoid ambiguous namespace including a ``:``. Remove the colon, to avoid ambiguous namespace
references. references.

View File

@ -46,7 +46,13 @@ class CheckUrlsTest(SimpleTestCase):
self.assertEqual(len(result), 1) self.assertEqual(len(result), 1)
warning = result[0] warning = result[0]
self.assertEqual(warning.id, 'urls.W002') self.assertEqual(warning.id, 'urls.W002')
expected_msg = "Your URL pattern '/starting-with-slash/$' has a regex beginning with a '/'" expected_msg = (
"Your URL pattern '/starting-with-slash/$' has a regex beginning "
"with a '/'. Remove this slash as it is unnecessary. If this "
"pattern is targeted in an include(), ensure the include() pattern "
"has a trailing '/'."
)
self.assertIn(expected_msg, warning.msg) self.assertIn(expected_msg, warning.msg)
@override_settings(ROOT_URLCONF='check_framework.urls.name_with_colon') @override_settings(ROOT_URLCONF='check_framework.urls.name_with_colon')