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

L10N使用Jinja2和Django对模板中的数字进行本地化,django,jinja2,Django,Jinja2,我正试图让Jinja2(和Django,通过Django-jinja)对一个数字进行本地化,例如123456变成123456(当然,123.456取决于语言环境)。我已经阅读了我能找到的关于这个主题的所有文档,但找不到任何真正有效的东西。使用标准DTL,您只需执行以下操作: {% localize on %}{{ some_number }}{% endlocalize %} 这在我使用常规Django模板的项目中运行良好,但当然在Jinja2中不起作用。我提到这很好,因为可以排除任何涉及se

我正试图让Jinja2(和Django,通过
Django-jinja
)对一个数字进行本地化,例如
123456
变成
123456
(当然,123.456取决于语言环境)。我已经阅读了我能找到的关于这个主题的所有文档,但找不到任何真正有效的东西。使用标准DTL,您只需执行以下操作:

{% localize on %}{{ some_number }}{% endlocalize %}
这在我使用常规Django模板的项目中运行良好,但当然在Jinja2中不起作用。我提到这很好,因为可以排除任何涉及
settings.py
的情况,例如
USE\u L10N
being
False

我尝试了以下方法,都是基于我找到的文档:

  • {{gettext(“%(num)d”,num=some_number)}
    -输出不带逗号或本地化的数字
  • {%trans num=some_number%}{{num}{%endtrans%}
    -如-outputs number所示,不带逗号或本地化
  • {{(一些数字|字符串)}
    -输出数字,不带逗号或本地化
  • {{some_number | localize}
    -
    localize
    不是有效的筛选器

那么,如何使用Jinja2轻松、正确地定位一个数字呢?

找到了答案。Jinja2似乎无法单独处理本地化问题,但是
django jinja
包含一个内置的contrib,它包装了
django.contrib.humanize.templatetags
。根据,如果启用了L10n,则使用
|intcomma
过滤器尊重格式本地化

要使用它,请将
django\u jinja.contrib.\u人性化
添加到
settings.py中的
已安装的应用程序

INSTALLED_APPS += ('django_jinja.contrib._humanize',)
然后在模板中,只需使用
|intcomma
过滤器:

{{ some_number|intcomma }}

虽然这是一个老问题,但我遇到了同样的问题。我发现这个解决方案不需要太多编辑就可行。 是为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',
            ]
        },
    },
}