Округление числа до ближайшей 1000 в шаблоне Django - PullRequest
0 голосов
/ 24 сентября 2018

Я хочу округлить число до ближайшей 1000 в шаблоне Django.

Что-то вроде

{{ 123456 | round(1000) }}

123000

Есть ли встроенный способ сделать это в Django, или я долженпросто написать собственный тег шаблона?

1 Ответ

0 голосов
/ 24 сентября 2018

Я не могу найти такую ​​функцию в Встроенные теги шаблонов и фильтры в документации 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<b>|round_down:"1000"</b> }}

Затем генерируется:

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