在不编辑模板的情况下将大数字减少到 Django 中的 intword

Reduce large number to intword in Django without editing template

我正在开发一个 Web 应用程序,它使用 django、django-tables2 和 Bootstrap4 显示 html table。我有一列 AUM,其中包含非常大的数字(高达十亿)。在我的 models.py 中,相应的模型使用 models.Interfield() 作为 AUM

class MyModel(models.Model):
    ...
    AUM = models.IntegerField(null= True, blank= True)
    ...

使用 django-tables2 和 Bootstrap4 将此模型转换为 table 并使用

渲染为模板
{% render_table table %}

相应列中显示的数字以原始格式显示,例如这个 1000000000。我想让它更易于阅读。我找到了两种分离数千的解决方案

我也看到有类似于 intcomma 的东西是 intword 并且它转换例如1000000 变成 100 万,在我看来这更易于人类阅读。与 intcomma 一样,这对我来说不是一个可行的解决方案,这就是为什么我正在寻找像 USE_THOUSAND_SEPARATOR = True 这样的全局设置,但是为了将 1000000 显示为 100 万(或 Mio。)而不是 1,000,000。

Django-tables2 允许使用 TemplateColumn 为单元格使用 django 模板语言。这确实需要您创建自定义 table:

# settings.py

INSTALLED_APPS = (
    # ...
    "django.contrib.humanize",
    "django_tables2"
    # ...
)


# tables.py

import django_tables2 as tables


class MyTable(tables.Table):
    AUM = tables.TemplateColumn(
        template_code="{% load humanize %}{{ value | intword }}"
    )

    class Meta:
        model = MyModel
        sequence = ("AUM", "...")  # using "..." here will automatically add the remaining columns of the model to the table.

# views.py

class MyView(SingleTableView):
    table_class = MyTable