我有这个 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 }}
有什么问题吗?根据我打印的其他内容,它的行为会有所不同?
{% 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 %}