Skip to main content
 首页 » 编程设计

python之Django 模板中的数字格式

2024年10月01日35arxive

我有一个字典如下:

{'warranty': '1 jaar', 'delivery': u'2017-06-13', 'to_pay': 9000.0, 'deposit': 1000.0} 

我将它发送到 Django 模板,我想将 to_pay 显示为 9.000,00。但我不能。

我有

{% load humanize %} 
{% load i18n %} 
{% load l10n %} 

在模板的顶部,我有

USE_I18N = True 
USE_L10N = True 

在 settings.py 中

我尝试了什么:

{{ car.sale.to_pay|floatformat:2|intcomma }} // 9,000,00 
{{ car.sale.to_pay|intcomma }} // 9.000,0  almost good, but I need two zeroes after comma 
{{ car.sale.to_pay|localize }} // 9000,0 

有什么想法吗?

请您参考如下方法:

自定义模板过滤器

您始终可以创建自己的模板过滤器以获得所需的结果。这是一个使用 intcomma 将数字格式化为您想要的结果的实现

from django import template 
from django.contrib.humanize.templatetags.humanize import intcomma 
 
register = template.Library() 
 
@register.filter 
def my_float_format(number, decimal_places=2, decimal=','): 
    result = intcomma(number) 
    result += decimal if decimal not in result else '' 
    while len(result.split(decimal)[1]) != decimal_places: 
        result += '0' 
    return result 

然后在模板中使用

{% load my_tags %} 
{{ 450000.0|my_float_format }} 

渲染这个

450.000,00 

旧答案(不正确)

您可以使用 stringformat 过滤器首先使用基本的 python 字符串格式并获得所需的小数位数,然后通过 intcomma 传递它以获取数字格式。

{% load humanize %} 
 
{{ car.sale.to_pay|stringformat:'0.2f'|intcomma }}