我試圖格式化浮動爲逗號分隔的貨幣。例如。 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
關於如何隱藏圓形部分和只顯示小數的任何想法? –