Esto no es problema de django o de python.
Parece mas bien problema de tu CSS.
O si prefieres usar <table> para tabular tus datos sería mas conveniente.
Código Python:
Ver original<table>
{% for post in post.object_list %}
{% if condicion_para_abrir_tag %}
<tr>
{% endif %}
<td>{{ post }}</td>
{% if condicion_para_cerrar_tag %}
</tr>
{% endif %}
{% endfor %}
</table>
Obviamente tienes que sustituir condicion_para_abir_tag y condicion_para_cerrar_tag, con las condiciones que satisfagan eso.
Otra manera
Código Python:
Ver original<table>
{% for post_sublist in post.object_list %}
<tr>
{% for article in post_sublist %}
<td>{{ article }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
No recomiendo esto, porque estarías metiendo lógica de presentación en la lógica de negocios. Si algún día quieres que ahora sean 2 columnas, tienes que cambiar el código de la vista y no el html.
La tercera opción (
y la mas recomendable) es simplemente usar CSS.
No soy un experto, pero meterías todo en div con cierto ancho y a cada articulo le das el ancho suficiente para que solo quepan 3 en todo lo ancho y los demás pasan abajo.
Puedes usar las grids de bootstrap como ejemplo.
http://getbootstrap.com/css/#grid