使用 Jinja2 和 Django 对模板中的数字进行 L10N 本地化

L10N localization of numbers in templates using Jinja2 and Django

我正在尝试让 Jinja2(和 Django,通过 django-jinja)本地化一个数字,例如。 123456 变为 123,456(或者,当然,123.456,具体取决于语言环境)。我已经阅读了有关该主题的所有文档,但找不到任何实际有效的文档。使用标准 DTL,可以这样做:

{% localize on %}{{ some_number }}{% endlocalize %}

这在我使用常规 Django 模板的项目中运行良好,但当然在 Jinja2 中不起作用。我提到这很好用,因为任何涉及 settings.py 的事情都可以排除,例如 USE_L10NFalse

我已经尝试了以下方法,所有这些都是基于我找到的文档:

那么,如何使用 Jinja2 轻松且正确地本地化数字?

想通了。 Jinja2 似乎不自己处理本地化,但 django-jinja 包含一个包装 django.contrib.humanize.templatetags 的内置贡献。根据 the documentation for that,如果启用 L10n,则使用 |intcomma 过滤器遵守格式本地化。

要使用它,请将 django_jinja.contrib._humanize 添加到 settings.py 中的 INSTALLED_APPS:

INSTALLED_APPS += ('django_jinja.contrib._humanize',)

然后在模板中,只需使用 |intcomma 过滤器:

{{ some_number|intcomma }}

虽然这是一个老问题,但我遇到了同样的问题,发现这个解决方案无需大量编辑即可实现。 Here 是为 jinja2 模板实现 L10n 的库。您可以将它与您的应用程序集成,例如

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.jinja2.Jinja2',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'extensions': [
                'jdj_tags.extensions.DjangoStatic',
                'jdj_tags.extensions.DjangoI18n',
                'jdj_tags.extensions.DjangoL10n',
            ]
        },
    },
}