jinja2中括号的四舍五入
我想知道在jinja2的括号里可以进行哪些操作。比如说,我想对嵌入的数据进行一些操作,像这样:
{{ round(255*(mileage['chevy'] - mileage['ford']))/1000 }}
这样做会报错,错误信息是:
UndefinedError: 'round' is undefined
同样,当我在jinja的括号里使用'abs'时,也会出现未定义的错误——尽管这两个都是标准库里的函数。有没有办法在模板渲染的时候进行这些操作,而不是在传递数据之前就处理好?
3 个回答
-1
如果你真的需要使用括号的写法,可以把需要的函数作为渲染参数传递。
比如,这段小代码:
from jinja2 import Environment, BaseLoader
mytemplate = '{{ round(3.7) }}'
result = Environment(loader=BaseLoader).from_string(mytemplate).render(round=round)
print(result)
会输出:
4
你也可以把一个模块里的所有函数都传递过来:
from jinja2 import Environment, BaseLoader
import math
from inspect import getmembers
mytemplate = '{{ fabs(sin(-pi/3)) }}'
result = Environment(loader=BaseLoader).from_string(mytemplate).render(getmembers(math))
print(result)
这样会输出:
0.8660254037844386
4
根据Jinja文档,[round]
{{ 42.55|round }}
这个函数会返回一个float
类型的数字,所以结果会是43.0
。如果你想指定小数位数,可以使用:
{{ 42.55321|round(2) }}
这样会返回42.55
,你还可以选择不同的舍入方法,比如round(2, 'ceil')
。
在进行一些数学运算时,可以把它放在括号里,比如:
{{ (x*y/z)|round(2) }}