在不编辑模板的情况下将大数字减少到 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。我想让它更易于阅读。我找到了两种分离数千的解决方案
- 使用
django.contrib.humanize
中的 intcomma
这对我来说不是一个可行的解决方案,因为它需要我在模板中添加一个过滤器,而我不能这样做,因为我只是添加 {% render_table table %}
(https://docs.djangoproject.com/en/2.1/ref/contrib/humanize/)
- 在我的
settings.py
中使用全局设置 USE_THOUSAND_SEPARATOR = True
,这是一个非常适合我的解决方案 (https://docs.djangoproject.com/en/dev/ref/settings/?from=olddocs#use-thousand-separator)
我也看到有类似于 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
我正在开发一个 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。我想让它更易于阅读。我找到了两种分离数千的解决方案
- 使用
django.contrib.humanize
中的intcomma
这对我来说不是一个可行的解决方案,因为它需要我在模板中添加一个过滤器,而我不能这样做,因为我只是添加{% render_table table %}
(https://docs.djangoproject.com/en/2.1/ref/contrib/humanize/) - 在我的
settings.py
中使用全局设置USE_THOUSAND_SEPARATOR = True
,这是一个非常适合我的解决方案 (https://docs.djangoproject.com/en/dev/ref/settings/?from=olddocs#use-thousand-separator)
我也看到有类似于 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