2015-01-15 23 views
1

我有這個名單這與Django的做多本字典的從查詢:從詞典列表生成Django的多行/列的表

對多種樂器的統計數據對每個會話強硬的聚合在一所音樂學校。

[{'count': 13, 'session': 1, 'instrument': u'Piano'}, {'count': 4, 'session': 1, 'instrument': u'Cello'}, {'count': 2, 'session': 1, 'instrument': u'Violin'}, {'count': 14, 'session': 2, 'instrument': u'Piano'}, {'count': 1, 'session': 4, 'instrument': u'Cello'}] 

如何可以循環這個通過作出表4列和n行,知道會有永遠4屆,但intruments的n個?

我幾乎嘗試了輸出什麼,我想(我的模板):

 <table class="table"> 
     <thead> 
     <tr> 
      <th>Session 1</th> 
      <th>Session 2</th> 
      <th>Session 3</th> 
      <th>Session 4</th> 
     </tr> 
     </thead> 
     {% for stat in stats_instrument %} 
       {% if stat.session == 1 %} 
       <tr><td>{{ stat.instrument }} {{ stat.count }}</td></tr> 
       {% endif %} 
     {% endfor %} 
     {% for stat in stats_instrument %} 
       {% if stat.session == 2 %} 
       <tr><td></td><td>{{ stat.instrument }} {{ stat.count }}</td></tr> 
       {% endif %} 
     {% endfor %} 
    ... 
    </table> 

實際的輸出是:

|Session 1| Session 2| Session 3| Session 4| 
|Piano 13 | 
|Cello 4 | 
|Violin 2 | 
|   | Piano 14 | 
|   |   |   | Cello 1 | 

我要的是更喜歡:

|Session 1| Session 2| Session 3| Session 4| 
|Piano 13 | Piano 14 |   | Cello 1 | 
|Cello 4 | 
|Violin 2 | 

我看到3個問題。

  1. 這些樂器在每個環節都不一樣,所以鋼琴可以在1-2-3會話中教。
  2. 會議不具有相同數量的樂器,會議1可以具有約5個樂器和會話3約10個樂器。
  3. 我正在循環多次相同的數據,它似乎不是非常有效。

我應該製作4個表格並放置類似內嵌塊的東西嗎?

回答

2

您可以先在您的視圖中訂購您的表格,然後將簡單的有序列表提供給模板。

你應該有類似第一組他們通過會話數

sessions = [{'count': 13, 'session': 1, 'instrument': u'Piano'}, {'count': 4, 'session': 1, 'instrument': u'Cello'}, {'count': 2, 'session': 1, 'instrument': u'Violin'}, {'count': 14, 'session': 2, 'instrument': u'Piano'}, {'count': 1, 'session': 4, 'instrument': u'Cello'}] 

values = set(map(lambda x:x['session'], sessions)) 
grouped_sessions = [[y for y in sessions if y['session']==x] for x in values] 

則:

[[{'count': 13, 'session': 1, 'instrument': u'Piano'}, {'count': 4, 'session': 1, 'instrument': u'Cello'}, {'count': 2, 'session': 1, 'instrument': u'Violin'}],[{'count': 14, 'session': 2, 'instrument': u'Piano'}],[{'count': 1, 'session': 4, 'instrument': u'Cello'}]] 

現在在您的模板做一個for循環裏面一個for循環,如:

<table><thead>...</thead><tbody> 
<tr> 
{% for g in grouped_sessions %} 
    <td><table> 
    {% for s in g %} 
    <tr><td>{{s.instrument}} {{s.count}}</td></tr> 
    {% endfor %} 
    </table></td> 
{% endfor %} 
</tr> 

這將創建許多嵌套表,但在視覺上它完成了工作。

希望它有幫助。

+0

它工作。我在修訂版中添加了表格的結束標籤。 – metraon 2015-01-16 14:59:49