2016-09-19 8 views
0

入れ子になったキーでdefaultdictを作成しようとしています。ここに私が書いたビューがありますが、明らかに複数のキーがdefaultdictで動作しません。私は、このビューを実行するとdefaultdictではどのように2つのキーを使用できますか?

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

また、ネストされたdictをまったく必要としない場合もあります。タプルであるキーで元の不具合を使用することができます:

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

私はクラスのルーチンを作ろうとしています。最初のキーは日(太陽、月など)、2番目のキーはピリオド(1番目、2番目など)です。私のテンプレートでは、この '{class_details.day.period}}'のような各期間のデータに 'class_details'変数をループしてアクセスしようとしています。 – MiniGunnR

+0

あなたが提供したコードを使用しましたが、テンプレートには何も表示されません。 – MiniGunnR

+0

しかしこれは以前とは全く異なる質問です。これはDjangoのテンプレートで 'class_details.day'は常にリテラルキー" day "を参照します。 –

関連する問題