Я нашел способ сделать это с условием. Это уродливо и нахально, но работает (для меня). first
- это то, что хотел ОП, но это более точно отвечает на реальный вопрос.
Учитывая это:
obj = {
'children': [
{ 'possessions' : { 'toys': [] } },
{ 'possessions' : { 'toys': ['train'] } }
{ 'possessions' : { 'toys': ['train', 'ball'] } }
]
}
Я хотел знать, есть ли у моего ребенка дети с игрушками.
Вот что я сделал:
Эквивалент 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"
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 10 *] * * * * * * * * * * * * * * * * * * * * * * * * всего 10 *. Затем мы перебираем список и проверяем значение False
.
- Если бы не было детей, это был бы пустой список, и
if
никогда не был бы поражен.
- Если бы у детей не было игрушек, это был бы список без
False
grouper
.
- Если бы у всех детей были игрушки, это был бы список с
False
grouper
.
- Если у некоторых детей есть игрушки, это будет список с
False
и True
grouper
s.