3

我想根据变量过滤for loop一个过滤器。这就是我正在做的事情:groupbyloop

{% for group in list_of_dicts | groupby('attribute') -%}
    {% if loop.index < 9 %}
    ...
    {% endif %}
{% endfor %}

它按我的预期工作。在文档中有这样的语法:

{% for user in users if not user.hidden %}
    <li>{{ user.username|e }}</li>
{% endfor %}

循环过滤器时如何使用上述语法?我的意思是像下面这样,它提出了一个UndefinedError

{% for group in list_of_dicts | groupby('attribute') if loop.index < 9 -%}
    ...
{% endfor %}

UndefinedError: 'loop' is undefined. the filter section of a loop as well as the else block don't have access to the special 'loop' variable of the current loop.  Because there is no parent loop it's undefined.  Happened in loop on line 18 in 'page.html'
4

1 回答 1

3

该过滤器的工作方式与普通 Python LC 中的一样(您可以访问group)。

在这种情况下使用过滤器无论如何都没有意义。例如,分组list_of_dicts包含比方说 3000 个元素,因此您正在进行 3000 次迭代,但您只需要 9 个。您应该对组进行切片:

{% for group in (list_of_dicts | groupby('attribute'))[:9] -%}
    ...
{% endfor %}

(假设过滤器返回一个列表)

于 2012-04-20T13:20:44.677 回答