Jinja2 将 float 转换为 decimal mid 计算

Jinja2 convert float to decimal mid calculation

由于一些糟糕的设计决定(不是我自己做出的),我遇到了一个小难题。

我有一些来自以前数据库查询的代码是..

{{ order.pa_tranlength * order.pa_width * order.pa_costprice }}

这工作正常,但是数据库所有者现在升级了数据库结构,最后一个值 order.pa_costprice 现在是浮点数,其他两个变量是小数。有没有一种方法可以在中途计算中将 order.pa_costprice 转换为小数。

我试过类似的东西..

{{ order.pa_tranlength * order.pa_width * "%d" order.pa_costprice}}

这显然不能用作字符串值(我匆忙测试过,但无济于事),但您可以了解我正在尝试做什么。

这个循环非常大,直接来自数据库查询,所以我试图找到一个解决方案,这意味着我不必在查询结果到达模板之前修改任何代码。

Jinja2 内部对此有可行的解决方案吗?

您不会修改查询代码,但如果您可以更改代码,则可以 template filter:

@app.template_filter('to_decimal')
def to_decimal_filter(f):
    return decimal.Decimal(f)

所以:

{{ order.pa_tranlength * order.pa_width * order.pa_costprice }}

变成:

{{ order.pa_tranlength * order.pa_width * order.pa_costprice|to_decimal }}