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

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 (0)

Leave a comment...

 
To leave a comment on this posterous, please login by clicking one of the following.
Posterous-login     Connect     twitter

About

Genius. Incredible. Remarkable. Awesome. Cool. On top of that, I am extremely humble too.