我试图让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 %} --按照django-jinja文档的建议--输出没有逗号或本地化的数字。{{ _(some_number|string) }} -输出没有逗号或本地化的数字。{{ some_number|localize }} - localize不是有效的过滤器.那么,如何使用Jinja2轻松和正确地本地化一个数字呢?
发布于 2015-02-20 20:31:17
弄明白了。Jinja2似乎没有单独处理本地化问题,但是django-jinja包含了一个内置的控制机制,它封装了django.contrib.humanize.templatetags。根据这方面的文件,如果启用了|intcomma过滤器,则使用L10n筛选器来尊重格式本地化。
要使用它,请将django_jinja.contrib._humanize添加到settings.py中的INSTALLED_APPS中
INSTALLED_APPS += ('django_jinja.contrib._humanize',)然后在模板中,只需使用|intcomma过滤器:
{{ some_number|intcomma }}发布于 2019-02-12 06:03:28
虽然这是一个老问题,但我遇到了同样的问题,我发现这个解决方案是可行的,不需要很多编辑。这里是为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',
]
},
},
}https://stackoverflow.com/questions/28637423
复制相似问题