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 }}
由于一些糟糕的设计决定(不是我自己做出的),我遇到了一个小难题。
我有一些来自以前数据库查询的代码是..
{{ 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 }}