一个打印表达式奇怪地依赖于另一个打印表达式

问题描述 投票:0回答:1

我有这个 Jinja2 模板:

{% set input = 1 %}
{% set steps = [1, 2, 3, 4]|select("greaterthan", input) %}
{{ steps|list }}
{{ steps|first if steps|list|length > 0 else None }}

打印:

[2, 3, 4]
None

现在我删除

{{ steps|list }}

{% set input = 1 %}
{% set steps = [1, 2, 3, 4]|select("greaterthan", input) %}
{{ steps|first if steps|list|length > 0 else None }}

它根本不打印任何内容。

然后我用

{{ steps|list }}
代替
{{ steps|first }}

{% set input = 1 %}
{% set steps = [1, 2, 3, 4]|select("greaterthan", input) %}
{{ steps|first }}
{{ steps|first if steps|list|length > 0 else None }}

现在打印:

2

{{ steps|first if steps|list|length > 0 else None }}
有什么问题吗?根据我打印的其他内容,它的行为会有所不同?

python jinja2
1个回答
0
投票

{% set steps = [1, 2, 3, 4]|select("greaterthan", input) %}
就像一个生成器表达式,基本上与这样的Python代码相同:

steps = (select("greaterthan", item) for item in [1,2,3,4])

也就是说,

steps
是一个生成器,你只能从中拉出next值,直到值耗尽为止。

您可能想要做的是首先将生成器耗尽到列表中,然后将 that 值分配给变量

steps

我猜测 jinja 语法就是添加

|list
:

{% set steps = [1, 2, 3, 4]|select("greaterthan", input)|list %}
© www.soinside.com 2019 - 2024. All rights reserved.