向Django自定义标记添加Floatformat

时间:2015-07-21 00:34:59

标签: django python-3.x django-models django-templates django-views

我正在使用Django 1.8.3和Python 3.4.3

我有一个自定义标记,它接受两个对象的值,将一个对象分成另一个并呈现总数。我是这样做的,因为被分割的两个对象是许多字段的总和所以我需要对总数进行最终计算。

我需要帮助的是,一旦两个值相互分开,浮点数会在十进制之后呈现最多15位数,我尝试使用|floatformat,但它似乎没有在标签上工作。我已经搜索并搜索了一个答案,但我似乎无法在我面前找到什么:)

一切正常,我只想将最终值格式化为2小数点。以下是我的代码。

simple_tag.py

from django import template

register = template.Library()


@register.simple_tag()
def average(num1, num2):
    return float(num1 / num2)

traffic.html(我的模板)

{% if traffic_list %}
<tr>
    <th>Monday</th>
    <td>{{ total_sales.Monday }}</td>
    <td>{{ total_campaigns.Monday }}</td>
    <td>{{ total_ifs_signups.Monday }}</td>
    <td>{{ total_traffic.Monday }}</td>
    <td>{% average total_traffic.Monday total_sales.Monday %}</td>
</tr>
...

上述标记的结果值

30.345407503234153

我希望它呈现

30.36

再次感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

您可以在标记定义中对浮点数进行舍入:

@register.simple_tag()
def average(num1, num2):
   return round(float(num1 / num2), 2)

或者你可以像这样使用floatformat过滤器:

{% average total_traffic.Monday total_sales.Monday as result %}
 <td>{{result|floatformat:2}}</td>

答案 1 :(得分:0)

在做平均值时,你必须:

@register.simple_tag()
def average(num1, num2):
    a = float(num1 / num2)
    # if you want you can round it too
    # a = round(float(num1/num2))
    return format(a, '.2f')