У меня есть python, где каждый ключ соответствует заголовку, а список, связанный с каждым заголовком, содержит произвольное количество значений:
data = {
"heading1": ['h1-val1', 'h1-val2', 'h1-val3', ],
"heading2": ['h2-val1', ],
"heading3": ['h3-val1', 'h3-val2', 'h3-val3', 'h3-val4', ],
}
Мне нужно отобразить это в Djangoшаблон в виде таблицы, где значения перечислены под каждым заголовком вертикально, а все пропущенные значения отображаются в виде пустой ячейки таблицы:
<table>
<thead>
<tr>
<th>heading1</th>
<th>heading2</th>
<th>heading3</th>
</tr>
</thead>
<tbody>
<tr>
<td>h1-val1</td>
<td>h2-val1</td>
<td>h3-val1</td>
</tr>
<tr>
<td>h1-val2</td>
<td></td>
<td>h3-val2</td>
</tr>
<tr>
<td>h1-val3</td>
<td></td>
<td>h3-val3</td>
</tr>
<tr>
<td></td>
<td></td>
<td>h3-val4</td>
</tr>
</tbody>
</table>
Каков наилучший способ добиться этого?
МойПервым делом стоит переставить исходный дикт в 2D-матрицу и просто передать его в шаблон.Я уверен, что я не первый, кто сталкивается с такой проблемой, и мне любопытно, как другие решили эту проблему.
ОБНОВЛЕНИЕ: Просто для справки,Вот мое первоначальное решение этой проблемы (которое меня не очень устраивает).
# Using the data dict from the question:
size = max(len(data['heading1']), len(data['heading2']), len(data['heading3']))
matrix = [[None, None, None] for i in range(size)] # initialize an empty matrix
# manually copy the data into the appropriate column :(
i = 0
for item in data['heading1']:
matrix[i][0] = item
i += 1
i = 0
for item in data['heading2']:
matrix[i][1] = item
i += 1
i = 0
for item in data['heading3']:
matrix[i][2] = item
i += 1
Затем я передал матрицу в шаблон, который выглядел следующим образом:
<table>
<thead><tr>
<th>heading1</th>
<th>heading2</th>
<th>heading3</th>
</tr></thead>
<tbody>
{% for row in matrix %}
<tr>
{% for col in row %}
<td>{% if col %}{{ col }}{% else %} {% endif %}</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>