Wie Erzeuge ein python dict, wie eine html-Tabelle mit vertikalen Spalten

Habe ich ein python dict, wo jede Taste entspricht einer überschrift, und die zugehörige Liste mit jede Rubrik enthält eine beliebige Anzahl von Werten:

data = { 
    "heading1": ['h1-val1', 'h1-val2', 'h1-val3', ],
    "heading2": ['h2-val1', ],
    "heading3": ['h3-val1', 'h3-val2', 'h3-val3', 'h3-val4', ],
} 

Muss ich machen das in einer Django-Vorlage als Tabelle, wo die Werte aufgeführt sind, vertikal unter jeder überschrift mit fehlenden Werten dargestellt, als eine leere Zelle in der Tabelle:

<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>

Was ist der beste Weg, dies zu erreichen?

Meine erste Neigung ist es, ordnen Sie die ursprünglichen dict in eine 2D-matrix, und nur passieren, dass in der Vorlage. Ich bin sicher, ich bin nicht der erste, der diese Art von problem, obwohl, und ich bin gespannt, wie andere dieses problem gelöst haben.

UPDATE: Nur als Referenz, hier ist meine ursprüngliche Lösung für dieses problem (das ich bin nicht sehr glücklich mit).

# 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

Ich dann an der matrix in der Vorlage, die wie folgt aussah:

<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 %}&nbsp;{% endif %}</td>
    {% endfor %}
    </tr>
{% endfor %}
</tbody>
</table>
Schreibe einen Kommentar