Because without the map(None + ....), your last row will be short elements if it doesn't divide pefectly.
So, if you're cols was 3, you'd get: [(1,2,3), (4,)] and of course, that could create bad html: <table> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>4</td> </tr> </table> So, now with the Map, the left over cells are set to None, so that's why the template does the {% if cell %} test inside the <TD> tag so you can have some empty cells finish off the row: eg: <tr> <td>4</td> <td></td> <td></td> </tr>...... You're right about the list of tuples instead of list of lists, but I only ever need iterables...