使用Django模板过滤器进行数学运算吗?

问题描述

| 在我的数据库中,我有一个存储价格信息的整数字段,例如\“ 10399 \”,\“ 84700 \”。 显示时,它们应为\“ $ 103.99 \”和\“ $ 847.00 \”。 我需要显示int * 0.01。 我想知道是否有一种使用Django模板过滤器的方法?喜欢:
{{ item.price|int_to_float_and_times_0.01 }}
另一个问题,实际上我选择了整数,因为我认为它比在数据库中使用float更有效。真的吗?     

解决方法

        您可以制作自己的模板过滤器,只需将输入除以100就可以满足您的需要。例如: 在my_app / templatetags / currency_helper.py中:
from django import template
register = template.Library()

@register.filter
def to_currency(value):
    return float(value) / 100.0
然后在您的模板中:
{% load currency_helper %}

etc...

{{item.price|to_currency}}
另外,如果您是我,我会将货币值存储在数据库中作为十进制字段,以避免这样做或处理舍入错误的麻烦。     ,        您可以在将整数传递给模板上下文之前简单地对其进行修改,例如,使用列表理解:
context[\'prices\'] = [float(item) * 0.01 for item in Model.objects.all()]
(如果您的Python版本支持的话,也可以通过删除括号将其变成生成器,这将使您的代码使用更少的内存。) 使用
int
而不是
float
似乎不太可能使您的网站明显更快。 如果您想要一个安全的价格类型,请使用
decimal
:http://docs.python.org/library/decimal.html     ,        我不知道是否可以返回浮点数,但是可以将数字格式化为字符串:
from django import template
register = template.Library()

def int_to_float_and_times(value):
  value = float(value) * .01
  return u\'${0:.2f}\'.format(value)

register.filter(\'int_to_float_and_times\',int_to_float_and_times)
您如何定义效率?通常,货币值以尝试进行精确计算的特殊格式存储。 编辑:函数名称中不允许使用0.01     ,        您可以使用
widthratio
templatetag进行划分:
${% widthratio item.price 100 1 %}
(如果a,b,c是
widthratio
的3个参数,则结果为(a / b)* c) 会导致:
$103.99
(对于10399)     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...