我找到了一种有条件的方法。它丑陋而骇人听闻,但它(对我来说)有效。 first是OP想要的,但这更接近地回答了实际问题。
鉴于这种:
obj = {
'children': [
{ 'possessions' : { 'toys': [] } },
{ 'possessions' : { 'toys': ['train'] } }
{ 'possessions' : { 'toys': ['train', 'ball'] } }
]
}
我想知道我的 obj 是否有任何拥有玩具的孩子。
这是我所做的:
Python等价物:
if ([child for child in obj.children if child.possessions.toys]):
# Whatever
Django模板:
我的方法是用来regroup构建符合或不符合标准的候选人集:
{% regroup obj.children by possessions.toys|length_is:"0" as by_toys %}
{% for check in by_toys %}{% if check.grouper == False %}
Whatever
{% endif %}{% endfor %}
regroup构建一个新对象,它本质上是:
[
{ 'grouper': '', 'list': [/*...*/] },
{ 'grouper': True, 'list': [/*...*/] },
{ 'grouper': False, 'list': [/*...*/] }
]
length_is:"0"确保我们在该列表中最多包含三个元素,并且grouper是True或False或''。然后我们遍历列表并检查一个False值。
- 如果没有孩子,它将是一个空列表,并且
if永远不会被击中。
- 如果没有孩子有玩具,那将是一个没有
False grouper.
- 如果所有孩子都有玩具,那将是一个带有
False grouper.
- 如果有些孩子有玩具,那将是一个带有
False和True groupers 的列表。