Django, szablony, pętle i cykle

(tl; dr na dole)

Pozwól mi spróbować wyjaśnić, co próbuję osiągnąć: Mam dwuwymiarową tablicę i chciałbym wyświetlić jej zawartość w określony sposób. Chcę „wierszy”, a każdy wiersz może wyświetlać nie więcej niż trzy „obiekty” z braku lepszego słowa. Chcę więc iterować po tablicy i utworzyć mój kod HTML w tym procesie. Mój pomysł jest następujący: każdy „pierwszy z trzech” elementów w tablicy powinien otworzyć „wiersz”. Każdy „trzeci z trzech” elementów powinien zamknąć „wiersz”. Jeśli jednak ostatni element w tablicy [wewnętrzna] nie jest „trzecią z trzech”, powinien nadal zamknąć wiersz. Na przykład, gdybyśmy mieli coś takiegoL=[ [0,1,2,3,4], [5,6,7] ], Chciałbym to wyświetlić tak:

0  1  2
3  4

5  6  7

Które mogą być oznaczone jak:

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

Moją pierwszą myślą było po prostu użycie operatora modulo i sprawdzenie, czy każda iteracja była „pierwszą”, „drugą” lub „trzecią” rzędu, ale szablony Django nie obsługują bezpośrednio modulo (więcej na ten temat później).

Więc wymyśliłem kod szablonu w ten sposób:

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

I to był dobry początek. Biorąc powyższy przykład, dalej0 otworzylibyśmy div, na1 nic nie rób2 zamknij div, włączony3 otwórz i włącz4... cóż, nie zamknie się, bo4 nie był „trzecim z serii 3”. Tak więc, podczas gdy szablony Django nie mają modulo, mają sprawny podział, więc wymyśliłem dodatkową logikę do powiedzenia, jeśli trafimy na ostatni element pętli [wewnętrzny] for, a także nie jest on podzielny przez 3 (więc nie mamy duplikatu), a następnie zamknij div:

{% 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 %}

To działało lepiej! Teraz przeszedłem przez całą pierwszą wewnętrzną tablicę z odpowiednim znacznikiem. Mój problem jest następujący: najwyraźniej funkcja cyklu Django nie resetuje się, gdy wychodzisz z zakresu wewnętrznej pętli for. Co to znaczy, mój numer5 z powyższego przykładu nie otwiera diva tak, jak powinien, nie jest rozpoznawany jako pierwszy w cyklu. W rzeczywistości jest rozpoznawany jako trzeci, a więc zamyka div!

Więc nie jestem pewien, dokąd stąd się udać. To wydaje się byćznane i nieustalone problemy w Django. Czy ktoś może pomóc?

tl; dr Chcę wziąć tablicę 2d, np.L=[ [0,1,2,3,4], [5,6,7] ] i odpowiednio oznacz to grupowanie nie więcej niż 3 na raz i bez grupowania elementów z wielu tablic razem, tak:

0  1  2
3  4

5  6  7

Jaki byłby kod tego szablonu i dlaczego?

questionAnswers(1)

yourAnswerToTheQuestion