5

広告とバナーの 2 つのモデルがあります。

「ジェネリック ビュー」DetailView を使用する場合、同時に 2 つのモデルを表示するにはどうすればよいですか?

私のurl.py

url(r'^(?P<pk>\d+)/$', DetailView.as_view(
    model               = Advertisment,
    context_object_name = 'advertisment',
), name='cars-advertisment-detail'),
4

2 に答える 2

9

確かにget_context_data、コンテキストに何かを追加するためにオーバーライドするだけです。

path('<int:pk>/', YourDetailView.as_view(), name='cars-advertisment-detail'),

class YourDetailView(DetailView):
    context_object_name = 'advertisment'
    model = Advertisement

    def get_context_data(self, **kwargs):
        """
        This has been overridden to add `car` to the template context,
        now you can use {{ car }} within the template
        """
        context = super().get_context_data(**kwargs)
        context['car'] = Car.objects.get(registration='DK52 WLG')
        return context
于 2013-02-18T12:29:15.353 に答える
4

私にとっては、次のようなカスタム ミックスインを作成する方が簡単です。

class ExtraContextMixin(object):

    def get_context_data(self, **kwargs):
        context = super(ExtraContextMixin, self).get_context_data(**kwargs)
        context.update(self.extra())
        return context

    def extra(self):
        return dict()

後で、この mixin をサブクラス化して、次のextraようにオーバーライドできます。

class MyDetailView(ExtraContextMixin, DetailView):

    def extra(self):
        extra = Extra.objects.all()
        return dict(extra = extra)

これはオーバーライドするよりもクリーンだと思いますget_context_data

于 2013-02-18T12:49:09.433 に答える