Django, plantillas, para loops, y ciclos.

(tl; dr en la parte inferior)

Permítame tratar de explicar lo que estoy tratando de lograr: tengo una matriz bidimensional y me gustaría mostrar su contenido de cierta manera. Quiero "filas", y cada fila no puede mostrar más de tres "objetos", a falta de una palabra mejor. Así que quiero iterar sobre la matriz y crear mi HTML en el proceso. Mi idea es esta: cada "primero de tres" elementos de la matriz debería abrir la "fila". Cada "tercero de tres" elementos debe cerrar la "fila". Sin embargo, si el último elemento de la matriz [interior] no resulta ser el "tercero de tres", aún debe cerrar la fila. Así, por ejemplo, si tuviéramos algo comoL=[ [0,1,2,3,4], [5,6,7] ], Me gustaría mostrarlo así:

0  1  2
3  4

5  6  7

Que podría estar marcado como:

<div>0 1 2</div>
<div>3 4</div>
<div>5 6 7</div>

Mi primer pensamiento fue simplemente usar el operador de módulo y ver si cada iteración era la "primera", la "segunda" o la "tercera" de una fila, pero las plantillas de Django no admiten directamente el módulo (más sobre esto más adelante).

Así que se me ocurrió un código de plantilla como este:

{% for x in L %}
 {% for y in x %}
  {% cycle '<div>' '' '' %}
   {{ y }}
  {% cycle '' '' '</div>' %}
 {% endfor %}<br/>
{% endfor %}

Y este fue un buen comienzo. Tomando el ejemplo anterior, en0 abriríamos un div, en1 no hacer nada, en2 cierra el div, en3 abrirlo, y en4... bueno, no se cerraría, porque4 No fue el "tercero en una serie de 3". Entonces, mientras que las plantillas Django no tienen módulo, sí tienen una verificación divisible, así que se me ocurrió una lógica adicional para decir, si golpeamos el último elemento del bucle for [inner], y tampoco es divisible por 3 (por lo que no tenemos un duplicado de cierre), luego cierre la división:

{% for x in z %}
 {% for y in x %}
  {% cycle '<div>' '' '' %}
   {{ y }}
  {% cycle '' '' '</div>' %}

  {% if forloop.last %}
  {% if forloop.counter|divisibleby:"3" %}
    <!-- Row Already Closed -->
  {% else %}
    </div>
  {% endif %}
  {% endif %}

 {% endfor %}<br/>
{% endfor %}

¡Esto funcionó mejor! Ahora, superé toda la primera matriz interna con el marcado adecuado. Mi problema es este: al parecer, la funcionalidad del ciclo de Django no se restablece cuando se sale del ámbito del bucle interno. Lo que esto significa es, mi número.5 Del ejemplo anterior no se abre un div como debería, no se reconoce como el primero en un ciclo. De hecho, en realidad está siendo reconocido como un tercero, ¡y por lo tanto está cerrando un div!

Así que no estoy seguro de a dónde ir desde aquí. Esto parece ser unProblemas conocidos y no solucionados en Django.. ¿Alguien puede ayudar, por favor?

tl; dr Quiero tomar una matriz 2d, por ejemplo.L=[ [0,1,2,3,4], [5,6,7] ] y márquelo correctamente agrupando no más de 3 a la vez y sin agrupar elementos de varios arreglos en conjunto, de esta manera:

0  1  2
3  4

5  6  7

¿Cuál sería el código de plantilla para eso y por qué?

Respuestas a la pregunta(1)

Su respuesta a la pregunta