Исправление рабочего разделителя тысяч с учетом локали в Django 4.04
Я ищу любую возможность гуманизации значений не в целом, а для некоторых выбранных значений. Если быть более конкретным, то речь идет о разделителе тысяч. Включение разделителя тысяч выглядит следующим образом:
settings.py
USE_L18N = True
USE_THOUSAND_SEPARATOR = True
views.py
def test (request):
return render (request, 'example.html', {'example_context_int': 1000})
example.html
#...
{% load_humanize %}
{{ example_context_int }}
генерирует на выходе 1.000
. За этим следуют как минимум две проблемы:
- использование любого целого числа, заданного контекстом, в качестве ссылки для создания ссылок (например, передача id объекта) приводит к чему-то вроде
link-to/1.000/
вместоlink-to/1000/
. - предварительное заполнение форм любым целым числом > 999 приводит к преобразованию в float вместо целого числа после отправки (например, предварительно заполненное
1.000
становится1
вместо1000
).
У меня есть две возможности решить это:
- использование
|stringformat:"s"
для любой переменной, которая не должна быть гуманизирована или - преобразование каждого целого числа, которое не разрешается гуманизировать, в строку, как
str (example_context_int)
.
У обоих методов есть плюсы и минусы, и я не предпочитаю ни один из них. Что я бы предпочел, так это явное очеловечивание значений вместо этого неявного преобразования всех целых и плавающих чисел. Следуя документации по этому поводу, |intcomma
нужно использовать на определенных переменных вместо набора USE_THOUSAND_SEPARATOR = True
. Но это работает правильно только в том случае, если не установлен никакой другой фильтр форматирования. Использование чего-то вроде {{ example_context_float|floatformat:2|intcomma }}
приведет к появлению 1,000,00
на выходе вместо локализованного (немецкого) 1.000,00
. Я также пытался следовать для управления локализацией в шаблонах , но это тоже не работает. Есть ли какой-нибудь способ явно указать Django, какое число разрешено гуманизировать с помощью правильного (= учитывающего локаль) разделителя тысяч? Ни документация, ни онлайн исследования не дали решения этой проблемы.
Если нет встроенного способа (или встроенный способ имеет ошибку), я буду благодарен за любой совет, как получить форматирование с учетом локали. Возможно, как создать хороший рабочий пользовательский тег шаблона для этого.
Я использую Django 4.04.
После поиска реализации, решением является, например, |floatformat:"2g"
. Символ "g" означает сгруппированный и локализованный вывод.