Вот один, который я написал с функцией «максимум элементов»:
useserialcomma = True
def listify(values, maxitems=4):
sercomma = ',' if useserialcomma else ''
l = len(values)
if l == 0:
return ''
elif l == 1:
return values[0]
elif l == 2:
return values[0] + ' and ' + values[1]
elif l <= maxitems:
return ', '.join(values[:l-1]) + sercomma + ' and ' + values[-1]
else:
andmoretxt = ' and %d more' % (l - maxitems)
return ', '.join(values[:maxitems]) + andmoretxt
Этот фильтр позволяет указать максимальное количество элементов, которые вы хотите отобразить.Итак, учитывая этот список:
myitems = ['foo', 'bar', 'baz', 'barn', 'feast', 'pizza']
этот код в вашем шаблоне:
{{ myitems|listify:3 }}
производит:
foo, bar, baz and 3 others