我试图让Jinja2(和Django,通过django-jinja
)本地化一个数字,例如。 123456
变为123,456
(当然,取决于区域设置,为123.456)。我已经阅读了关于这个主题的所有文档,并且找不到任何实际可行的文档。使用标准DTL,可以做到:
{% localize on %}{{ some_number }}{% endlocalize %}
这在使用常规Django模板的项目中工作正常,但当然,在Jinja2中不起作用。我提到这样可以正常工作,因为可以排除任何涉及settings.py
USE_L10N
False
{{ gettext("%(num)d", num=some_number) }}
}的内容。
我已经尝试了以下内容,所有这些都基于我发现的文档:
{% trans num=some_number %}{{ num }} {% endtrans %}
- 输出数字,不带逗号或本地化。{{ _(some_number|string) }}
- 正如django-jinja documentation所建议的那样 - 输出数字,没有逗号或本地化。{{ some_number|localize }}
- 输出数字,不带逗号或本地化。localize
- {{1}}不是有效的过滤器。那么,如何使用Jinja2轻松正确地对数字进行本地化?
答案 0 :(得分:0)
想出来。 Jinja2似乎没有自己处理本地化,但django-jinja
包含一个包含django.contrib.humanize.templatetags
的内置贡献。根据{{3}},如果启用了L10n,则使用|intcomma
过滤器来遵循格式本地化。
要使用它,请在django_jinja.contrib._humanize
中将INSTALLED_APPS
添加到settings.py
:
INSTALLED_APPS += ('django_jinja.contrib._humanize',)
然后在模板中,只需使用|intcomma
过滤器:
{{ some_number|intcomma }}
答案 1 :(得分:0)
尽管这是一个古老的问题,但我遇到同样的问题,发现该解决方案无需大量编辑就可以实现。 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',
]
},
},
}