Skip to content

Commit

Permalink
Fixed #35443 -- Changed ordinal to return negative numbers unchanged.
Browse files Browse the repository at this point in the history
Previously, `-1` was converted to `"-1th"`. This has been updated to
return negative numbers "as is", so that for example `-1` is
converted to `"-1"`. This is now explicit in the docs.

Co-authored-by: Martin Jonson <[email protected]>
  • Loading branch information
2 people authored and sarahboyce committed May 27, 2024
1 parent b049bec commit d3a7ed5
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 1 deletion.
4 changes: 3 additions & 1 deletion django/contrib/humanize/templatetags/humanize.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,14 @@
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)
Expand Down
1 change: 1 addition & 0 deletions docs/ref/contrib/humanize.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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.
6 changes: 6 additions & 0 deletions tests/humanize_tests/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@ def test_ordinal(self):
"102",
"103",
"111",
"-0",
"-1",
"-105",
"something else",
None,
)
Expand All @@ -70,6 +73,9 @@ def test_ordinal(self):
"102nd",
"103rd",
"111th",
"0th",
"-1",
"-105",
"something else",
None,
)
Expand Down

0 comments on commit d3a7ed5

Please sign in to comment.