diff --git a/django/contrib/humanize/templatetags/humanize.py b/django/contrib/humanize/templatetags/humanize.py index 7e8f163174..21f4c452fa 100644 --- a/django/contrib/humanize/templatetags/humanize.py +++ b/django/contrib/humanize/templatetags/humanize.py @@ -1,6 +1,7 @@ from __future__ import unicode_literals import re from datetime import date, datetime +from decimal import Decimal from django import template from django.conf import settings @@ -35,7 +36,7 @@ def intcomma(value, use_l10n=True): """ if settings.USE_L10N and use_l10n: try: - if not isinstance(value, float): + if not isinstance(value, (float, Decimal)): value = int(value) except (TypeError, ValueError): return intcomma(value, False) diff --git a/django/contrib/humanize/tests.py b/django/contrib/humanize/tests.py index c648f544d7..505edf3709 100644 --- a/django/contrib/humanize/tests.py +++ b/django/contrib/humanize/tests.py @@ -1,5 +1,6 @@ from __future__ import unicode_literals import datetime +from decimal import Decimal try: import pytz @@ -58,20 +59,20 @@ class HumanizeTests(TestCase): def test_intcomma(self): test_list = (100, 1000, 10123, 10311, 1000000, 1234567.25, - '100', '1000', '10123', '10311', '1000000', '1234567.1234567', + '100', '1000', '10123', '10311', '1000000', '1234567.1234567', Decimal('1234567.1234567'), None) result_list = ('100', '1,000', '10,123', '10,311', '1,000,000', '1,234,567.25', - '100', '1,000', '10,123', '10,311', '1,000,000', '1,234,567.1234567', + '100', '1,000', '10,123', '10,311', '1,000,000', '1,234,567.1234567', '1,234,567.1234567', None) self.humanize_tester(test_list, result_list, 'intcomma') def test_l10n_intcomma(self): test_list = (100, 1000, 10123, 10311, 1000000, 1234567.25, - '100', '1000', '10123', '10311', '1000000', '1234567.1234567', + '100', '1000', '10123', '10311', '1000000', '1234567.1234567', Decimal('1234567.1234567'), None) result_list = ('100', '1,000', '10,123', '10,311', '1,000,000', '1,234,567.25', - '100', '1,000', '10,123', '10,311', '1,000,000', '1,234,567.1234567', + '100', '1,000', '10,123', '10,311', '1,000,000', '1,234,567.1234567', '1,234,567.1234567', None) with self.settings(USE_L10N=True, USE_THOUSAND_SEPARATOR=False):