使用django-tables2时如何格式化浮点数的显示?

时间:2018-01-31 16:17:57

标签: django django-tables2

我正在使用django-tables2来显示一些数据。我有一列浮点数,希望它们只显示两位小数(因此,10.238324将显示为10.24)。有一个简单的方法吗?在Django模板中,我使用{{number||floatformat:2}}执行此操作。

潜在相关文档:
http://django-tables2.readthedocs.io/en/latest/pages/column-attributes.html

3 个答案:

答案 0 :(得分:5)

如果您只有一个包含浮点数的列,请在render_<column_name>() method

中格式化您的值
class NumberTable(tables.Table):
    number = tables.Column()

    def render_number(self, value):
        return '{:0.2f}'.format(value)

如果您有多个包含浮点数的列,则可以定义custom column并重复使用它:

class NumberColumn(tables.Column):
    def render(self, value):
        return '{:0.2f}'.format(value)


class NumberTable(tables.Table):
    temperature = NumberColumn()
    pressure = NumberColumn()
    flow = NumberColumn()

这个自定义列也可能实现一个自定义构造函数,添加小数位数,如果你想要改变的话。

答案 1 :(得分:0)

1。在视图中舍入您的数据

实际上,它并不直接控制数字的显示,并且对于不需要它们的值会省略小数(24.1而不是{{1} })。这是一个快速的解决方案,因为您必须修改自己的观点。然而,它并不是一种好的风格。

2。替换django_tables2呈现的模板

文档说你可以use your own table template

默认模板(source code)包含您可以覆盖的块。我认为这是最佳选择。您自己的24.10看起来与此示例类似:

float_table.html

这会将{% extends "table.html" %} {# hope that finds the original template #} {% block table.tbody.row %} <tr {{ row.attrs.as_html }}> {% for column, cell in row.items %} <td {{ column.attrs.td.as_html }}>{% if column.localize == None %}{{ cell|floatformat:2 }}{% else %}{% if column.localize %}{{ cell|localize }}{% else %}{{ cell|unlocalize }}{% endif %}{% endif %}</td> {% endfor %} </tr> {% endblock table.tbody.row %} 过滤器应用于未定义localize属性的每个列。如果你不希望在格式上更加个性化,那么你渲染每个单元格似乎是获得你想要的最不具侵入性的方式。

如果您想要更多粒度,则会变得更加困难。我认为高级模块的微调很少很漂亮:)。

3。通过javascript添加floatformat<td>属性和格式

仅仅是为了完整性,而不是我推荐的方式:文档告诉你如何add custom attributes to rows or columns。您可以将其用作钩子来添加类<tr>之类的类。通过javascript(也许也可以通过CSS某种方式?),然后你可以对呈现的内容进行舍入。

所以我认为选项2真的是最干净的方式。您甚至可以简化模板片段,以便在您不感兴趣的情况下检查本地化。

我认为django_tables2的一个很好的功能是有一个钩子,用于将模板过滤器链接到单元格的内容。也许您向他们发送功能请求:)

答案 2 :(得分:0)

您也可以使用normalize

class DecimalColumn(tables.Column):
    '''Column to normalize decimals'''

    def render(self, value):
        return value.normalize()

用法:

class MyTable(tables.Table):
    amount = DecimalColumn()