python - 在 Django 模板中将数字四舍五入到最接近的 1000
问题描述
我想在 Django 模板中将一个数字向下舍入到最接近的 1000。
就像是
{{ 123456 | round(1000) }}
123000
在 Django 中有没有内置的方法可以做到这一点,还是我应该只编写一个自定义模板标签?
解决方案
我在 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'
推荐阅读
- haskell - Haskell 中的基准测试
- sql - Postgres/JSON 更新嵌套数组元素
- pyspark - 如何在循环内创建 pyspark DataFrame?
- blockchain - CEXIO是否支持API提现?
- java - 线程执行太多次并导致竞争条件,即使我正在使用锁
- javascript - ASP.Net Core:将配置值传递给 JavaScript 客户端代码
- ruby-on-rails - .minimum .maximum 的 Ankane GroupDate 问题
- excel - 查找字符串中是否存在任何子字符串列表
- android - 如何检测android语音是离线还是在线
- assembly - 程序集 8086 - 在控制台中显示编号而不是 ASCII 表示