2016-09-19 82 views
0

我想用嵌套鍵創建一個defaultdict。這是我寫的視圖,但顯然多個鍵在defaultdict中不起作用。如何在defaultdict中使用兩個鍵?

def routine_view(request, klass_id): 
    days = Routine.DAYS 
    periods = Routine.PERIODS 

    class_details = defaultdict(list) 
    classes = Routine.objects.filter(klass_id=klass_id) 

    for cls in classes: 
     class_details[cls.day][cls.period].append(cls) 

    context = { 
     "days": days, 
     "periods": periods, 
     "class_details": class_details 
    } 
    return render(request, "routine/routine_view.html", context) 

當我運行這個觀點我得到以下錯誤:

IndexError at /routine/1/ 
list index out of range 

回答

1

你的問題是不完全清楚,但我想你想它本身包含列表的defaultdict一個defaultdict。所以:

class_details = defaultdict(lambda: defaultdict(list)) 

或者,你可能不需要嵌套字典;你可以改爲使用原始的默認值與鍵是一個元組:

class_details[(cls.day, cls.period)].append(cls) 
+0

我想爲一個類做一個例程。所以第一個關鍵是一天(太陽,週一等),第二個關鍵是週期(第一,第二等)。在我的模板中,我試圖通過循環訪問'class_details'變量來訪問每個期間的數據,例如'{{class_details.day.period}}'。 – MiniGunnR

+0

我已經使用您提供的代碼,模板不顯示任何內容。 – MiniGunnR

+0

但是這是一個完全不同的問題,在此之前已經回答了很多次:在Django模板中,'class_details.day'將始終引用文字鍵「day」。 –

相關問題