是否有内置的Django模板过滤器,它可以在列表中找到满足条件的第一个值?

时间:2014-07-15 21:40:20

标签: python django django-templates

在Django模板中,如何返回与条件匹配的列表的第一个元素?该列表可能为空。我想知道是否有一个过滤器找到迭代中的第一个元素以匹配特定条件,然后停止检查,类似于Python的nexthttps://stackoverflow.com/a/2364277/1337422)。

>>> lis = ['a', 1, 40, 'three', 5]
>>> next(x for x in lis if x == 1)
1

1 个答案:

答案 0 :(得分:2)

没有内置的Django模板过滤器可以做到这一点。

如果您想要匹配特定条件,那么编写custom template filter会很容易。例如:

from django import template

register = template.Library()

@register
def first_one_in_list(l):
return next((x for x in l if x==1), default=None) # specify default to avoid stop iteration

如果你想在模板中指定任意条件,我认为你需要做一些hacky。 Django模板语言旨在防止模板中的复杂逻辑。