2017-12-10 4 views
1

私はCBviewをListviewから継承しています。クエリーセットの結果の塊に応じてテンプレートとCBVを変更します

私が必要:

  1. クエリセットにおける要素がない場合は、空である、私はちょうど1がある場合には異なるメッセージまたは別のテンプレート

  2. で テンプレートを表示する必要がありますそのIいくつかの以前の回答に基づいて、私は(リダイレクト)行く必要があるクエリセット内の要素

  3. DetailViewへ

(他の質問で)2を受け取った、私はgetを上書きする必要があると思う。

私が完全にgetを変更した場合、後で、変更の変更の動作が問題を引き起こす可能性があります(ページング、コンテキスト関連のコードもあります)。

私がsuper()を呼び出し、ストアが変数に入る場合、get_querysetの結果をどのように知っているか取得していますか?

答えて

2

単純な解決策は、CBVのget_template_namesメソッドをオーバーライドすることです。

class MyCBV(django.views.generic.TemplateView): 
    ... 
    def get_template_names(self): 
     if not self.queryset.count(): 
      return ["custom_template1.html", ] 
     elif self.queryset.count() == 1: 
      return ["custom_template2.html", ] 
     else: 
      return ["default_template.html", ] 

希望します。私はget_template_namesをオーバーライドする方が良い考えであると思います。なぜなら、getは他のものを書き直す必要があるからです。だから、私の助言はget_template_namesメソッドをオーバーライドすることです。

関連する問題