是否有django模板过滤器只能获取浮点后的数字?
例如:
2.34 --> 34
2.00 --> 00
1.10 --> 10
我在https://docs.djangoproject.com/en/dev/ref/templates/builtins/找不到答案。
答案 0 :(得分:4)
除creating your own custom filter之外,您可以使用django-mathfilters
package解决问题:
{{ value|mod:1|mul:100|floatformat:"0" }}
其中:
mod
是"模数"过滤器由mathfilters
mul
是"乘法"过滤器由mathfilters
floatformat
是内置的django过滤器演示:
>>> from django.template import Template, Context
>>> c = Context({'value': 2.34})
>>> t = Template('{% load mathfilters %}{{ value|mod:1|mul:100|floatformat:"0" }}')
>>> t.render(c)
u'34'
答案 1 :(得分:0)
由于有太多其他问题提到这个问题,我还想补充一个答案。
至于我,@ alecxe提出的答案是一种矫枉过正。可读性很糟糕,您的项目开始依赖于额外的库。但是你只需要在页面上显示两位数字。
创建自己的模板的解决方案似乎更好。它看起来更简单,使用更少的操作,没有依赖性。
@register.filter
def floatfract(value):
sf = "%.2f" % value
return sf.split('.')[1]
并在模板中使用它:
{{ object.price|floatfract }}
就是这样。我正在使用它。
只是为了使答案完整,我可以在你希望灵活的分数长度的情况下扩展它。例如,有2到5位数字。 看起来更糟糕:
@register.filter
def floatfract(value, length=2):
sf = "%.{length}f".format(length=length) % value
return sf.split('.')[1]
用法:
{{ object.price|floatfract:5 }}
答案 2 :(得分:0)
最好编写自己的过滤器,但是如果您不想这样做,我可以为您提供另一种并非最佳的“惰性”解决方案:
{{ value|stringformat:"f"|slice:"-6:-4" }}