我得到了與每個按鍵對應一個標題Python字典,並與每一個標題相關聯的列表包含的值任意數量的:如何使Python字典與豎列的HTML表格
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>
什麼來實現的最佳途徑這個?
我的第一個傾向是將原始字典重新排列成二維矩陣,並將其傳遞到模板中。但我確信我不是第一個遇到這種問題的人,而且我很好奇別人怎麼解決這個問題。
更新:僅供參考,這是我對這個問題的原始解決方案(我不是很滿意)。
# 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>
上面應該提到這一點,但是需要將標題和數據拆分爲arunkumar的原因是:你不能指望'dict.items()'以可預測的順序給你鍵。恰恰相反,從數據中拆分標題也可以簡化模板結構。 –
我已經更新了代碼來照顧填充列表。應該刪除需要初始化空矩陣(前面)。 –