在Django模板中将数字四舍五入至最接近的1000

时间:2018-09-24 13:25:29

标签: python django templates django-templates

我想在Django模板中将数字四舍五入到最接近的1000。

类似

{{ 123456 | round(1000) }}

123000

在Django中是否有内置的方法可以做到这一点?还是应该只编写自定义模板标签?

1 个答案:

答案 0 :(得分:1)

我在Built-in template tags and filters in the Django documentation中找不到这样的功能。最接近的是floatformat [Django-doc],但是我们只能四舍五入为整数(不能四舍五入,等等)。

但是编写自定义模板过滤器并不难:

# app/templatetags/rounding.py

from django import template
from decimal import Decimal

register = template.Library()

@register.filter
def round_down(value, size=1):
    size = Decimal(size)
    return (Decimal(value)//size) * size

或者如果您仅打算使用整数:

@register.filter
def round_down(value, size=1):
    size = int(size)
    return (value//size) * size

然后我们可以使用以下格式:

{% load rounding %}

{{ 123456|round_down:"1000" }}

然后生成:

>>> t = """{% load rounding %}{{ 123456|round_down:"1000" }}"""
>>> Template(t).render(Context())
'123000'