我想在Django模板中将数字四舍五入到最接近的1000。
类似
{{ 123456 | round(1000) }}
123000
在Django中是否有内置的方法可以做到这一点?还是应该只编写自定义模板标签?
答案 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'