自定义渲染模型字段

时间:2014-03-14 15:47:25

标签: django django-models django-templates

这个问题来自DecimalField。

具体地说,当DecimalField在模板中呈现时,它会根据指定的准确度显示点后的每个数字,即使它的全部为零,例如如果你只是存储

1.248

呈现为(假设8位精度)

1.24800000

比前者更不方便。

一个简单的解决方案是定义一个方法来渲染食欲并相应地使用它,但它不是一个干燥的解决方案。

我对这个问题的研究一直没有用,似乎应该通过修补django源来解决(因为我几乎不认为人们更喜欢冗长的表示),但我希望事先听到社区的意见。

1 个答案:

答案 0 :(得分:1)

有一个用于渲染浮点数的内置模板过滤器: https://docs.djangoproject.com/en/1.6/ref/templates/builtins/#floatformat

如果您希望所有数字四舍五入到最接近的千分之一:

{{ your_float|floatformat:3 }}

如果小数点后的位数不同,您可以尝试编写一个自定义模板过滤器,用于删除尾随零。这些文档非常适合编写自己的模板过滤器/标签: https://docs.djangoproject.com/en/1.6/howto/custom-template-tags/

编辑: 更干的解决方案可能是在模型中定义一个函数,并在模板中使用它。它可能看起来像这样:

models.py其中decimal_field是您的问题字段:

def formated_decimal_field(self):
    value = str(self.decimal_field)
    output = value.rstrip('0').rstrip('.') if '.' in value else value
    return output

这样,您只需在模板中使用{{ object.formated_decimal_field }}