Фрагмент фильтра перегородки Django

Я использую один из фрагментов Django для разделения данных на 3 столбца, и пока все работает, я не знаю, как вызвать средний раздел.

Фрагмент:

@register.filter
def partition(thelist, n):
try:
    n = int(n)
    thelist = list(thelist)
except (ValueError, TypeError):
    return [thelist]
p = len(thelist) / n
return [thelist[p*i:p*(i+1)] for i in range(n - 1)] + [thelist[p*(i+1):]]

Шаблон:

{% for x in y|partition:"3"|first %} (working, shows first 1/3)
{% for x in y|partition:"3"|middle %} (not working)
{% for x in y|partition:"3"|last %} (working, shows last 1/3)

Очевидно, что "середина" неверна. Я попробовал "второй", и это тоже не сработало.

Какие-либо предложения?

1 ответ

first а также last являются шаблонными фильтрами для получения первого и последнего элементов списка. Нет шаблона фильтра для получения второго, третьего и т. Д. Элементов. Вы должны использовать for item in .. построить:

{% for row in mylist|partition:"3" %}
    {% for item in row %}
        do something with {{ item }}
    {% endfor %}
{% endfor %}
Другие вопросы по тегам