如何在Django中集中使用floatformat

时间:2010-11-04 16:33:27

标签: python django django-models django-templates

在我的项目中,我要求用户提供一些措施,价格和重量。我想将数据存储为两位十进制值。我想我应该使用DecimalField而不是FloatField,因为我不需要太多的精度。

当我在模板中打印值时,我不希望打印零无效小数。

示例:

10.00应该只显示10

10.05应显示10.05

我不想在每个模板中使用floatformat过滤器我显示的值太多了。所以我想知道是否有某种方式以集中的方式影响为所有应用程序呈现的值。

由于

3 个答案:

答案 0 :(得分:2)

您是否尝试过django插件Humanize

你可能会找到你想要的东西。

修改

你是对的, humanize 过滤器不能在这里完成工作。 在挖掘django内置过滤器和标签后,我找不到任何可以解决您问题的方法。因此,我认为您需要一个自定义过滤器。有点像...

from django import template

register = template.Library()

def my_format(value):
    if value - int(value) != 0:
        return value
    return int(value)

register.filter('my_format',my_format)
my_format.is_safe = True

在您的django模板中,您可以执行类似......

的操作
{% load my_filters %}
<html>
<body>
{{x|my_format}}
<br/>
{{y|my_format}}
</body>
</html>

对于值xy1.01.1,分别显示:

  1
  1.1

我希望这会有所帮助。

答案 1 :(得分:1)

我终于想出了这个问题的答案并将其发布在我的博客中: http://tothinkornottothink.com/post/2156476872/django-positivenormalizeddecimalfield

我希望有人发现它很有用

答案 2 :(得分:0)

模型中的属性如何:

_weight = models.DecimalField(...)
weight = property(get_weight)

def get_weight(self):
    if self._weight.is_integer():
        weight = int(self._weight)
    else:
        weight = self._weight
    return weight