Django, шаблоны для циклов и циклов

(TL; Dr внизу)

Позвольте мне попытаться объяснить, что я пытаюсь выполнить: у меня есть двумерный массив, и я хотел бы отобразить его содержимое определенным образом. Я хочу "строки", и каждая строка может отображать не более трех "объектов", из-за отсутствия лучшего слова. Поэтому я хочу перебрать массив и создать свой HTML в процессе. Моя идея такова: каждый "первый из трех" элементы в массиве должны открывать «строку». Каждый "третий из трех" элементы должны закрывать «строку». Однако, если последний элемент в массиве [inner] не является «третьим из трех», он все равно должен закрыть строку. Так, например, если бы у нас было что-то вродеL=[ [0,1,2,3,4], [5,6,7] ]Я хотел бы отобразить это так:

0  1  2
3  4

5  6  7

Который может быть помечен как:

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

Моя первая мысль состояла в том, чтобы просто использовать оператор по модулю и посмотреть, была ли каждая итерация «первой», «второй» или «третьей»; ряда, но шаблоны Django не поддерживают напрямую по модулю (подробнее об этом позже).

Итак, я пришел с шаблоном кода следующим образом:

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

И это было хорошее начало. Принимая приведенный выше пример, на0 мы бы открыли div, на1 ничего не делать, на2 закрыть div, на3 откройте его и на4... ну, это не близко, потому что4 не был "третьим в серии из 3". Таким образом, хотя шаблоны Django не имеют модуля, у них есть проверка на делимость, поэтому я придумал дополнительную логику, чтобы сказать, если мы попадем в последний элемент цикла [inner] for, и он также не делится на 3 (поэтому у нас нет дубликатов закрытия), затем закройте 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 %}

Это сработало лучше! Теперь я прошел весь первый внутренний массив с правильной разметкой. Моя проблема заключается в следующем: по-видимому, функциональность цикла Django не сбрасывается, когда вы выходите за пределы внутреннего цикла for. Что это значит, мой номер5 из приведенного выше примера не открывается div, как следует, он не распознается как первый в цикле. Фактически, он фактически признан третьим, и поэтому он закрывает div!

Так что я не уверен, куда идти дальше. Это похоже наизвестные и нефиксированные проблемы в Django, Кто-нибудь может помочь, пожалуйста?

tl;dr Я хочу взять 2d массив, напримерL=[ [0,1,2,3,4], [5,6,7] ] и правильно пометьте его, группируя не более 3 за один раз и не группируя элементы из нескольких массивов вместе, например так:

0  1  2
3  4

5  6  7

Каким будет код шаблона для этого и почему?

Ответы на вопрос(1)

Ваш ответ на вопрос