Django template filter: Show list of objects as table with fixed number of columns


I recently ran into the following problem: I needed to be able to display a list of users in a table that had a maximum of X columns. Since I could not find the solution on the Internet I decided to give it a try and here is my resulting template filter to do it:

def tablecols(data, cols):
    rows = []
    row = []
    index = 0
    for user in data:
        row.append(user)
        index = index + 1
        if index % cols == 0:
            rows.append(row)
            row = []
    # Still stuff missing?
    if len(row) > 0:
        rows.append(row)
    return rows
register.filter_function(tablecols)



Then you can use it in your templates like so:

<table>
{% for row in members|tablecols:5 %}
    <tr>
    {% for member in row %}
        <td>
            {% show_simple_profile member user %}
        </td>
    {% endfor %}
    </tr>
{% endfor %}
</table>

It will break down the “members” list into a list of lists, each of the first being a group of (in this case) 5 users max.

Have fun :)

Comments

Popular Posts