Из-за отсутствия лучшего решения я создал следующий фильтр:
from django.conf import settings
from django import template
from django.utils import numberformat
from django.utils.formats import get_format
register = template.Library()
@register.filter()
def localnumber(value, lang=None):
lang = lang or settings.LANGUAGE_CODE
return numberformat.format(
value,
get_format("DECIMAL_SEPARATOR", lang, use_l10n=True),
None,
get_format("NUMBER_GROUPING", lang, use_l10n=True),
get_format("THOUSAND_SEPARATOR", lang, use_l10n=True),
force_grouping=True,
use_l10n=True,
)
В моем шаблоне я использую фильтр следующим образом:
{% with lang=request.META.HTTP_ACCEPT_LANGUAGE %}
<span>{{ my_var_with_raw_number|localnumber:lang }}</span>
{% endwith %}
Не идеально, но это может кому-то помочь в качестве временного решения.