我试图格式化浮动为逗号分隔的货币。例如。 543921.9354
变成$543,921.94
。我在Jinja模板中使用format
过滤器,似乎模仿Python中的%
运算符而不是Python format
函数?Jinja模板 - 将浮动格式设置为以逗号分隔的货币
如何在Jinja中完成此格式化?是否有可能使用format
过滤器?这是我到目前为止,这一切都完成除逗号:
"$%.2f"|format(543921.9354)
这当然产量
$543921.94
我试图格式化浮动为逗号分隔的货币。例如。 543921.9354
变成$543,921.94
。我在Jinja模板中使用format
过滤器,似乎模仿Python中的%
运算符而不是Python format
函数?Jinja模板 - 将浮动格式设置为以逗号分隔的货币
如何在Jinja中完成此格式化?是否有可能使用format
过滤器?这是我到目前为止,这一切都完成除逗号:
"$%.2f"|format(543921.9354)
这当然产量
$543921.94
写了一个custom filter。如果你正在使用Python 2.7版,它可以是这样的:
def format_currency(value):
return "${:,.2f}".format(value)
如果你有Python的2.6或更新版本:
你可以写一个自定义过滤器为一个目的,但是,作为一个更广泛的解决方案,你也可以更新格式过滤器本身:
from jinja import Environment, FileSystemLoader
def format(fmt_str, *args, **kwargs):
if args and kwargs:
raise jinja2.exceptions.FilterArgumentError(
"can't handle positional and keyword "
"arguments at the same time"
)
ufmt_str = jinja2.utils.soft_unicode(fmt_str)
if kwargs:
return ufmt_str.format(**kwargs)
return ufmt_str.format(*args)
env = Environment(loader=FileSystemLoader('./my/template/dir'))
env.filters.update({
'format': format,
})
这将取代现有的format
过滤器(如神社2.7.1)。该函数的大部分内容都直接从format
源文件中删除。这个函数和jinja的唯一区别在于它使用str.format()
函数来格式化字符串。我认为在format
过滤器使用Python的str.format()
之前不会再支持Python 2.5,我敢打赌,它不会很长时间才会使用Python的str.format()
。
更新:使用Jinja2的和Python 3,这个工作相当不错的模板,而不必定义任何自定义代码:
{{ "${:,.2f}".format(543921.9354) }}
我不知道到底是什么的依赖是有这个工作,但恕我直言,任何阅读这个答案的人都会做得很好,至少在担心自定义过滤器之前尝试一下。
为了延长@alex VASI的答案,我肯定会写一个自定义过滤器,但我也想用Python的locale
功能,用于处理货币分组,符号,
def format_currency(value):
locale.currency(value, symbol=True, grouping=True)
主要的事情注意使用locale
的是它不适用于默认的'C'语言环境,因此您必须将它设置为您的机器上可用的东西。
对于你在找什么,你可能需要,
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
,但如果你想英镑英镑,你会使用,
locale.setlocale(locale.LC_ALL, 'en_GB.UTF_8')
。
import locale
locale.setlocale(locale.LC_ALL, 'en_US')
locale.currency(543921.94, symbol=True, grouping=True)
> '$543,921.94'
locale.setlocale(locale.LC_ALL, 'en_GB')
> '£543,921.94'
这也适用于我在Python 2.7中。很好的答案! – hamx0r
关于如何隐藏圆形部分和只显示小数的任何想法? –