在jinja2括号中舍入

max*_*axm 11 python templates jinja2

我想通常我很好奇jinja2括号中允许的操作,例如我要做的是对嵌入数据执行操作,如下所示:

{{ round(255*(mileage['chevy'] - mileage['ford']))/1000 }}
Run Code Online (Sandbox Code Playgroud)

这会在回溯时引发错误:

UndefinedError:'round'未定义

类似地,当我尝试在括号中的jinja块中使用'abs'时,我得到一个未定义的错误 - 即使它们都是标准的lib函数.有没有办法在模板渲染过程中执行此操作,而不是在传递数据之前?

mad*_*jar 31

jinja2模板语言与python语言不同.在jinja2中,对值的操作通常在过滤器中完成:{{ something | operation }}.您可以在jinja2文档中找到过滤器列表.

例如,要进行舍入,您可以执行以下操作:

{{ 42.55|round }}
Run Code Online (Sandbox Code Playgroud)

这将在网页上显示"42".一个abs过滤器以同样的方式存在.

请注意,这些过滤器只能用于在显示前更改值,并可用于计算.无论如何,不​​应该在模板中进行计算.

  • “无论如何都不应该在模板中进行计算。” <- 这是一个糟糕的建议。以数据表为例,其中的数字需要以不同方式在多列中显示。 (3认同)
  • 但是,如果转换很简单(例如,为了显示百分比而将部分值除以总值),在控制器中执行此操作是一种浪费性的膨胀,应该明智地出现在视图中。 (2认同)