(tl;dr внизу)
Позвольте мне объяснить, что я пытаюсь сделать :У меня есть двумерный массив, и я хотел бы отобразить его содержимое определенным образом. Мне нужны «строки», и каждая строка может отображать не более трех «объектов», за неимением лучшего слова. Итак, я хочу перебрать массив и создать свой HTML в процессе. Моя идея заключается в том, что :каждый «первый из трех» элементов в массиве должен открывать «строку». Каждый «третий из трех» элементов должен замыкать «ряд». Однако, если последний элемент в массиве [inner] не является «третьим из трех», он все равно должен закрыть строку. Так, например, если бы у нас было что-то вроде L=[ [0,1,2,3,4], [5,6,7] ]
, я бы хотел отобразить это так:
0 1 2
3 4
5 6 7
Который может быть размечен как:
0 1 2
3 4
5 6 7
Моей первой мыслью было просто использовать оператор по модулю и посмотреть, была ли каждая итерация «первой», «второй» или «третьей» в строке, но шаблоны Django напрямую не поддерживают модуль по модулю (, подробнее об этом позже ).
Поэтому я придумал такой код шаблона:
{% for x in L %}
{% for y in x %}
{% cycle '' '' '' %}
{{ y }}
{% cycle '' '' '' %}
{% endfor %}
{% endfor %}
И это было хорошее начало. Взяв приведенный выше пример, в 0
мы бы открыли div, в 1
ничего не делали, в 2
закрыли div, в 3
открыли его, а в 4
… ну, это не t близко, потому что 4
не был «третьим в серии из 3». Так,в то время как шаблоны Django не имеют модуля, у них есть проверка на деление на, поэтому я придумал дополнительную логику, чтобы сказать, если мы нажмем последний элемент [внутреннего] цикла for, и он также не делится на 3 (поэтому у нас нет дубликата close ), затем закройте div:
{% for x in z %}
{% for y in x %}
{% cycle '' '' '' %}
{{ y }}
{% cycle '' '' '' %}
{% if forloop.last %}
{% if forloop.counter|divisibleby:"3" %}
{% else %}
Это сработало лучше! Теперь я прошел весь первый внутренний массив с правильной разметкой. Моя проблема заключается в следующем :, по-видимому, функциональность цикла Django не сбрасывается, когда вы выходите за рамки внутреннего цикла for. Это означает, что мой номер 5
из приведенного выше примера не открывает div должным образом, он не распознается как первый в цикле. Фактически, он распознается как третий, и поэтому он закрывает div!
Так что я не уверен, куда идти отсюда. Похоже, это известные и неисправленные проблемы в Django . Кто-нибудь может помочь, пожалуйста?
tl;dr Я хочу взять двумерный массив, например. L=[ [0,1,2,3,4], [5,6,7] ]
и правильно разметить его, группируя не более 3 за раз и не группируя вместе какие-либо элементы из нескольких массивов, например:
0 1 2
3 4
5 6 7
Каким будет код шаблона для этого и почему?