summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/contrib/humanize/templatetags/humanize.py4
-rw-r--r--docs/ref/contrib/humanize.txt1
-rw-r--r--tests/humanize_tests/tests.py6
3 files changed, 10 insertions, 1 deletions
diff --git a/django/contrib/humanize/templatetags/humanize.py b/django/contrib/humanize/templatetags/humanize.py
index 19000c185c..174e367a69 100644
--- a/django/contrib/humanize/templatetags/humanize.py
+++ b/django/contrib/humanize/templatetags/humanize.py
@@ -24,12 +24,14 @@ register = template.Library()
def ordinal(value):
"""
Convert an integer to its ordinal as a string. 1 is '1st', 2 is '2nd',
- 3 is '3rd', etc. Works for any integer.
+ 3 is '3rd', etc. Works for any non-negative integer.
"""
try:
value = int(value)
except (TypeError, ValueError):
return value
+ if value < 0:
+ return str(value)
if value % 100 in (11, 12, 13):
# Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th).
value = pgettext("ordinal 11, 12, 13", "{}th").format(value)
diff --git a/docs/ref/contrib/humanize.txt b/docs/ref/contrib/humanize.txt
index 7c1af53ed3..1596f30b97 100644
--- a/docs/ref/contrib/humanize.txt
+++ b/docs/ref/contrib/humanize.txt
@@ -143,3 +143,4 @@ Examples:
* ``3`` becomes ``3rd``.
You can pass in either an integer or a string representation of an integer.
+Negative integers are returned unchanged.
diff --git a/tests/humanize_tests/tests.py b/tests/humanize_tests/tests.py
index 5e4f7f0ef7..ab967e2874 100644
--- a/tests/humanize_tests/tests.py
+++ b/tests/humanize_tests/tests.py
@@ -55,6 +55,9 @@ class HumanizeTests(SimpleTestCase):
"102",
"103",
"111",
+ "-0",
+ "-1",
+ "-105",
"something else",
None,
)
@@ -70,6 +73,9 @@ class HumanizeTests(SimpleTestCase):
"102nd",
"103rd",
"111th",
+ "0th",
+ "-1",
+ "-105",
"something else",
None,
)