diff --git a/django/utils/text.py b/django/utils/text.py index 295f919b51..374fd78f92 100644 --- a/django/utils/text.py +++ b/django/utils/text.py @@ -104,6 +104,8 @@ class Truncator(SimpleLazyObject): """ self._setup() length = int(num) + if length <= 0: + return "" text = unicodedata.normalize("NFC", self._wrapped) # Calculate the length to truncate to (max length - end_text length) @@ -144,6 +146,8 @@ class Truncator(SimpleLazyObject): """ self._setup() length = int(num) + if length <= 0: + return "" if html: return self._truncate_html(length, truncate, self._wrapped, length, True) return self._text_words(length, truncate) diff --git a/tests/template_tests/filter_tests/test_truncatechars_html.py b/tests/template_tests/filter_tests/test_truncatechars_html.py index 6c5fc3c883..881290d47d 100644 --- a/tests/template_tests/filter_tests/test_truncatechars_html.py +++ b/tests/template_tests/filter_tests/test_truncatechars_html.py @@ -8,7 +8,7 @@ class FunctionTests(SimpleTestCase): truncatechars_html( '
one two - three
four five
The qu....
', truncator.chars(10, "....", html=True), @@ -206,6 +208,8 @@ class TestUtilsText(SimpleTestCase): lazystr("The quick brown fox jumped over the lazy dog.") ) self.assertEqual("The quick brown fox…", truncator.words(4)) + self.assertEqual("", truncator.words(0)) + self.assertEqual("", truncator.words(-1)) def test_truncate_html_words(self): truncator = text.Truncator(