Jinja2过滤器的运算优先级?

4 投票
1 回答
3724 浏览
提问于 2025-04-18 03:57

我不太清楚Jinja的限制,所以这可能做不到……我想计算两个变量的百分比,这两个变量是我传给Jinja的,但我无法让它正确四舍五入。我想要的结果是这样的:

{{ spygames / games|length * 100 | round(0) | int }}

这个计算得出的正确数字是66.666666,因为spygames是2,而总共有3个游戏,但它显示成了“66.6666666667”(我在html里加了%符号),我想要的结果是“67”。

我还尝试过在Python中获取游戏的数量,并把它作为一个单独的整数值传进去,但结果还是一样。

我该如何把这个数字四舍五入成一个整数呢?

谢谢!

1 个回答

6

Jinja的文档没有明确说明优先级规则,但我觉得过滤器只会应用到它前面的100这个字面量上。

为了确保过滤器应用到表达式的结果上,可以将你的表达式分组:

{{ (spygames / games|length * 100) | round(0) | int }}

我个人会使用str.format()函数;它有一个%的格式选项,可以用来乘以100:

{{ '{:.0%}'.format(spygames / games|length) }}

这样确实会在输出中添加一个百分号。

撰写回答