1

1.3 からの Django の新しいクラスベースのビューについて頭を捻ろうとしています。

私は少し読んだ:

しかし、私が見たことのない例や方法は、いくつかのビューが共通の「親」クラスをサブクラス化して、そこからデータを再利用できるかどうかです。(一般的な命名法のスラッシングを許してください)

私がやろうとしていることの例:

class MyParentClass(TemplateView):
   def get(self, request, *args, **kwargs):
     session_data = request.session
     other_variables = foovars
     return self.render_to_response(context)

class MyChildClassOne(TemplateView):
    template_name = "template_one.htm"

    def get(self,request, *args, **kwargs):
      resultant_data = foodata
      return {'data' : resultant_data }


class MyChildClassTwo(TemplateView):
    template_name = "template_two.htm"

    def get(self,request, *args, **kwargs):
      other_data = foootherdata
      return {'data' : other_data }

したがって、2 つの子クラスの違いは、使用するテンプレートと返される「データ」だけです。どちらのビューも、親クラスから session_data と other_variables を返すため、すべての子クラスで「return session_data, other_variables」を繰り返すことはありません。

4

2 に答える 2

1

考えられる方法は次のとおりです。親クラスは、子クラスによって設定されるコンテキストで data という変数を返します。

例:

class MyParentClass(TemplateView):
    def get(self, request, *args, **kwargs):
        session_data = request.session
        other_variables = foovars
        context['data'] = data
        return self.render_to_response(context)

class MyChildClassOne(MyParentClass):
    template_name = "template_one.htm"

    def get(self,request, *args, **kwargs):
        data = foodata
        return super(MyChildClassOne, self).get(request, args, kwargs)


class MyChildClassTwo(MyParentClass):
    template_name = "template_two.htm"

    def get(self,request, *args, **kwargs):
        data = foootherdata
        return super(MyChildClassTwo, self).get(request, args, kwargs)

両方の子クラスは から継承しMyParentClass、そのgetメソッドは名前付きの変数dataをコンテキストに自動的に設定します。データ値は、子クラスによって提供されます。完了したら、親のgetメソッドを呼び出して、レンダリングを含む一般的な操作を実行します。

于 2012-03-04T16:16:58.313 に答える