Исправление рабочего разделителя тысяч с учетом локали в 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. За этим следуют как минимум две проблемы:

  1. использование любого целого числа, заданного контекстом, в качестве ссылки для создания ссылок (например, передача id объекта) приводит к чему-то вроде link-to/1.000/ вместо link-to/1000/.
  2. предварительное заполнение форм любым целым числом > 999 приводит к преобразованию в float вместо целого числа после отправки (например, предварительно заполненное 1.000 становится 1 вместо 1000).

Это известная проблема.

У меня есть две возможности решить это:

  1. использование |stringformat:"s" для любой переменной, которая не должна быть гуманизирована или
  2. преобразование каждого целого числа, которое не разрешается гуманизировать, в строку, как 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" означает сгруппированный и локализованный вывод.

Вернуться на верх