1

多くのクラスベースのビューで同じコンテキスト変数を使用したいと思います。Pythonの基本的な知識を使用して、スーパークラスを作成し、多重継承を使用してこれを実行しました。

class ContextCommonToManyViews():
    def addToContext(self, context): 
        context['form'] = FormForManyPages()
        context['username'] = self.request.user.username
        context['available_in_many_views'] = something
        return context

class ViewA(ListView, ContextCommonToManyViews):
    model = ModelA

    def get_context_data(self, **kwargs):
        context = super(ViewA, self).get_context_data(**kwargs)
        context = self.addToContext(context)
        context['specific_to_view'] = 'ViewA here'
        return context

class ViewB(ListView, ContextCommonToManyViews):
    model = ModelB

    def get_context_data(self, **kwargs):
        context = super(ViewB, self).get_context_data(**kwargs)
        context = self.addToContext(context)
        context['specific_to_view'] = 'ViewB here'
        return context

もっと良い方法はありますか?

4

1 に答える 1

1

このようなミックスインはよりクリーンかもしれません:

class ContextCommonToManyViews(object):
    def get_context_data(self, request, **kwargs):
        context = super(ContextCommonToManyViews, self).get_context_data(request, **kwargs)
        context['form'] = FormForManyPages()
        context['username'] = self.request.user.username
        context['available_in_many_views'] = something
        return context

class ViewA(ContextCommonToManyViews, ListView):
    model = ModelA

class ViewB(ContextCommonToManyViews, ListView):
    model = ModelB

    def get_context_data(self, request, **kwargs):
        context = super(ViewB, self).get_context_data(request, **kwargs)
        context.update({'specific_to_B': 'some_value'})
        return context
于 2012-10-01T17:29:10.037 に答える