我正在寻找任何可能的人性化价值,而不是一般的,但对于一些选定的值。更具体地说,大约有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
作为输出。接下来至少有两个问题:
- 使用上下文给出的任何整数作为创建链接的参考(例如传递对象id)导致类似
link-to/1.000/
而不是link-to/1000/
的东西。 - 使用任意整数>999强制在提交后转换为浮点数而不是整数(例如,预填充的
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哪个数字可以使用正确的(= locale aware)分隔符进行人性化设置?无论是文档还是在线研究都没有给出解决方案。
如果没有内置的方法(或内置的方法有一个错误),我感谢任何关于如何获得区域识别格式的建议。也许如何建立一个良好的工作自定义模板标签。
我使用的是Django 4.04。
通过搜索实现,以|floatformat:"2g"
为例。'g'表示分组和本地化的输出。