Django шаблон таблицы пользовательские ячейки?

Я немного играю с django и хочу создать таблицу, которую я заполняю чем угодно. Я очень новичок в программировании на django и html. У меня есть 4 цикла for (звучит как много)

{% for row in rows %} 
<tr>
    {% for column in columns %}
           
           {% for item1 in items1 %}
               {% if item1.attribute == column.attribute and something %} 
                      <td>{{item1.name}}</td>
               {% endif %}
           {% endfor %}
                        
           {% for item2 in items2 %}
               {% if something %}
                   <td>{{item2.name}}</td>
               {% endif %}
           {% endfor %}
    {% endfor %}
 </tr>
{% endfor %}

Так что, как вы видите, только если одно из условий if истинно, создается ячейка. Это явно не то, чего я хочу, и я знаю, что, выполнив

<td>
{% for column in columns %}
<td>
   {% for item1 in items1 %}
.
.
.
   {% endif %}
{% endfor %}
</td>

Здесь будет ячейка для каждого кортежа строк и столбцов. Однако я хочу индивидуально добавить разный фон для каждого типа элементов (item.type exists), например <td bgcolor= "color_name | hex_number | rgb_number"> </td>. Сначала я попробовал использовать переменную {% with emptycell="yes" %}, которую я изменяю через пользовательский фильтр (который в любом случае не работает), но, как я слышал, я не должен изменять переменные в html-файле. Так что, может быть, у кого-нибудь есть идея?

Вам нужны пустые ячейки в таблице, а не отсутствующие <td>...</td>, поэтому

<td>{% if item1.attribute == column.attribute and something %} 
        {{item1.name}}
    {% endif %} 
</td>

Вы также можете предоставить некоторое стандартное или альтернативное содержимое ячейки с помощью предложения {% else %}.

Я не уверен насчет внутренних циклов. Вообще, лучше создавать данные таблицы как список списков в Python и передавать их в шаблон в качестве контекста. Допустим, он называется data, а в пустые ячейки вы поместили "". Тогда ваш шаблон будет гораздо более естественным благодаря тому, что программирование было выполнено на подходящем языке программирования (Python). Заметьте, что язык шаблонов Django является "мнением" и намеренно не полноценной средой программирования. Архитекторы Django придерживались мнения, что программирование должно осуществляться на Python, представление в шаблоне.

<table>
{% for row in data %}

   {% if forloop.first %}
       <tr><th> col_1_header ...</th> ... </tr>
   {% endif %}

   <tr>
   {% for item in row %}
       <td>{{item}}</td>
   {% endfor %}
   </tr>

{% endfor %}
</table>
Вернуться на верх