"""
Template tags for working with lists.

You'll use these in templates thusly::

    {% load listutil %}
    {% for sublist in mylist|anticollate:"3" %}
        {% for item in mylist %}
            do something with {{ item }}
        {% endfor %}
    {% endfor %}
"""

from django import template

register = template.Library()

@register.filter
def anticollate(thelist, n):
    """
    Break a list into ``n`` pieces. Some lists (at the beginning) may be larger than the rest if
    the list doesn't break cleanly. That is::

    >>> l=range(10)
    >>> anticollate(l,3)
    [[0, 3, 6, 9], [1, 4, 7], [2, 5, 8]]
    >>> anticollate(l,4)
    [[0, 4, 8], [1, 5, 9], [2, 6], [3, 7]]
    >>> anticollate(l,5)
    [[0, 5], [1, 6], [2, 7], [3, 8], [4, 9]]
    """
    try:
        n = int(n)
        thelist = list(thelist)
    except (ValueError, TypeError):
        return [thelist]
    return [[thelist[j] for j in range(len(thelist)) if j%n==i] for i in range(n)] 
