【问题标题】:Adding a Floatformat to Django Custom Tag将浮点格式添加到 Django 自定义标签
【发布时间】:2023-03-10 13:56:01
【问题描述】:

我正在使用 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

再次感谢您的帮助。

【问题讨论】:

  • 为什么 30.3454 舍入到 30.36?
  • 那是我看屏幕太久了:)

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


【解决方案1】:

你可以在标签定义中对浮点数进行四舍五入:

@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>

【讨论】:

  • 这正是我所需要的。在标签内进行四舍五入以保持模板清洁。非常感谢!!
【解决方案2】:

进行平均时,您必须:

@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')

【讨论】:

  • 感谢您的帮助;非常感谢。
猜你喜欢
  • 2013-07-18
  • 1970-01-01
  • 2016-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多