在Django模板中将负数转换为正数?

15
在 Django 模板中如何将负数转化为正数?
{% for balance in balances %}
    {{ balance.amount }}
{% endfor %}

如果balance.amount是负数,我希望将其转换为正数。


https://dev59.com/iGIk5IYBdhLWcg3wG6s6 - Greg
我可以不创建自定义模板标签来完成这个吗? - kangfend
1
你的问题特别涉及到模板。你不想在视图中完成这个任务,有什么原因吗? - Garry Cairns
4个回答

12

我建议安装django-mathfilters

然后你可以像这样简单地使用abs过滤器:

{% for balance in balances %}
    {{ balance.amount|abs }}
{% endfor %}

8

如果您不想/无法安装django-mathfilters

您可以很容易地创建自定义过滤器:

from django import template
register = template.Library()


@register.filter(name='abs')
def abs_filter(value):
    return abs(value)

7
这个可以不添加django-mathfilters就能工作,但这不是一个很好的实践方法。
{% if balance.amount < 0 %}
{% widthratio balance.amount 1 -1 %}
{% else %}
{{ balance.amount }}
{% endif %}

Widthratio 是用于创建条形图的,但也可用于乘法运算和除法运算


2
哦,天啊!widthratio要乘起来了!嘿嘿,这种超出常规的思维方式真是太棒了——我以最奇怪的方式喜欢它。现在是公共服务宣传的时候了。如果您决定使用上述代码,请务必添加 {# widthratio被用于将balance.amount乘以-1 #},以使此代码具有一点意义。 - Krystian Cybulski
1
干得好,兄弟,继续保持。 - Hassan ALi

4

from this SO:

{% if qty > 0 %}
  Please, sell {{ qty }} products.
{% elif qty < 0 %}
  Please, buy {{ qty|slice:"1:" }} products.
{% endif %}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接