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>