修正了Django 4.04中带有区域识别的千位分隔符



我正在寻找任何可能的人性化价值,而不是一般的,但对于一些选定的值。更具体地说,大约有1000个分隔符。像这样启用千位分隔符:

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强制在提交后转换为浮点数而不是整数(例如,预填充的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哪个数字可以使用正确的(= locale aware)分隔符进行人性化设置?无论是文档还是在线研究都没有给出解决方案。

如果没有内置的方法(或内置的方法有一个错误),我感谢任何关于如何获得区域识别格式的建议。也许如何建立一个良好的工作自定义模板标签。

我使用的是Django 4.04。

通过搜索实现,以|floatformat:"2g"为例。'g'表示分组和本地化的输出。