2017-10-01 3 views
1

私のモデルではHorarioクラスが定義されており、テンプレートディレクトリにhorario_list.htmlがあります。私はこのクラスを定義する 場合は、すべてが正常に動作します:リストビューにtemplate_nameが必要なのは

class HorariosView(generic.ListView): 
    model = Horario 

    def get_queryset(self): 
     return Horario.objects.all() 

をしかし、私は例外TemplateDoesNotExistを取得し、この

class HorariosView(generic.ListView): 
    model = Horario 

    def get_queryset(self): 
     return list(Horario.objects.all()) 

のように、リストによって戻り値の型を変更した場合。

私は私のクラスでtemplate_nameプロパティを追加する場合は今、すべてが再び動作します。

class HorariosView(generic.ListView): 
    model = Horario 
    template_name = 'horario_list.html' 

    def get_queryset(self): 
     return list(Horario.objects.all()) 

とき、なぜtemplate_nameが必要ですか?

答えて

1

本当のクエリーセットがある場合、Djangoはそれにmodel属性を要求し、そのモデル名に基づいてテンプレート名を作成します。 the codeを参照してください。しかし、リストにはmodelという属性はありません。そのため、Djangoはテンプレートを呼び出す必要がありません。

実際には、get_querysetメソッドのクエリーセット以外は返さないでください。

+0

これは動作を説明しています。戻り値の型については、[doc for get_queryset](https://docs.djangoproject.com/en/1.11/ref/class-based-views/mixins-multiple-object/#django.views.generic.list.MultipleObjectMixin .get_queryset)は 'このビューの項目のリストを取得します。これは反復可能でなければならず、クエリーセット(クエリーセット固有の動作が有効になる)である可能性があります。 ' – matiasg

+0

2回目の読書では、「テンプレート名」がこの「クエリーセット固有の動作」の1つである可能性があります。 – matiasg

関連する問題