首页 > 解决方案 > 在 Django 模板中将数字四舍五入到最接近的 1000

问题描述

我想在 Django 模板中将一个数字向下舍入到最接近的 1000。

就像是

{{ 123456 | round(1000) }}

123000

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

标签: pythondjangotemplatesdjango-templates

解决方案


我在 Django 文档的内置模板标签和过滤器中找不到这样的功能。最接近的是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'

推荐阅读