diff --git a/django/utils/html.py b/django/utils/html.py index a9ebd17935..650e8485ab 100644 --- a/django/utils/html.py +++ b/django/utils/html.py @@ -26,7 +26,7 @@ DOTS = ['·', '*', '\u2022', '•', '•', '•'] unencoded_ampersands_re = re.compile(r'&(?!(\w+|#\d+);)') unquoted_percents_re = re.compile(r'%(?![0-9A-Fa-f]{2})') word_split_re = re.compile(r'(\s+)') -simple_url_re = re.compile(r'^https?://\w', re.IGNORECASE) +simple_url_re = re.compile(r'^https?://\[?\w', re.IGNORECASE) simple_url_2_re = re.compile(r'^www\.|^(?!http)\w[^@]+\.(com|edu|gov|int|mil|net|org)$', re.IGNORECASE) simple_email_re = re.compile(r'^\S+@\S+\.\S+$') link_target_attribute_re = re.compile(r'(]*?)target=[^\s>]+') diff --git a/tests/defaultfilters/tests.py b/tests/defaultfilters/tests.py index 8596f8c801..21734faf95 100644 --- a/tests/defaultfilters/tests.py +++ b/tests/defaultfilters/tests.py @@ -314,6 +314,11 @@ class DefaultFiltersTests(TestCase): self.assertEqual(urlize('see test[at[example.com'), 'see test[at[example.com' ) + # Check urlize works with IPv4/IPv6 addresses + self.assertEqual(urlize('http://192.168.0.15/api/9'), + 'http://192.168.0.15/api/9') + self.assertEqual(urlize('http://[2001:db8:cafe::2]/api/9'), + 'http://[2001:db8:cafe::2]/api/9') def test_wordcount(self): self.assertEqual(wordcount(''), 0)