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

9 years ago

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 :)