1つのオブジェクトに関する情報を、各ビューのget_context_dataで繰り返さずに、多くのビューに入れたいとします。私はget_context_dataクラスを必要とすることを理解しているので、他のビューと混在することができます。 ここに私の例では、私はUpdateAnotherObjectViewの文脈における「some_object」を見てみたい:多くの異なるDjangoビューで同じコンテキストを挿入するには?
class BaseObjectInfoView(View):
def get_context_data(self, **kwargs):
context_data = super(BaseObjectInfoView, self).get_context_data(**kwargs)
context_data['some_object'] = SomeObjects.objects.get(pk=1)
return context_data
class UpdateAnotherObjectView(BaseObjectInfo, UpdateView):
template_name = 'create_object.html'
form_class = AnotherObjectForm
model = AnotherObjects
def get_context_data(self, **kwargs):
context_data = super(UpdateAnotherObjectView, self).get_context_data(**kwargs)
context_data['all_another_objects'] = AnotherObjects.objects.all()
return context_data
それは動作しますが、親の「表示」クラスの一部はget_context_dataではありません。 BaseObjectInfoViewから継承するために特別なクラスが必要なのでしょうか?
別の方法でコンテキストを構築する方が良いでしょうか?
とてもいいです!しかし、コンテキストmixinを使って管理するには、URLパターン(例: 'object_pk')に記述されているビューkwargsに依存するオブジェクトをコンテキストに配置する必要がありますか?私の例では、pk = 1でオブジェクトを取得しましたが、pkマストはURLから取得します。 –
pkはビュー上で 'self.kwargs'で利用可能です。これは 'View.as_view()'によって行われます。しかし、「DetailView」の一部である[SingleObjectMixin](http://ccbv.co.uk/projects/Django/1.11/django.views.generic.detail/SingleObjectMixin/)は、もしあればあなたのために頑張ってくれます。ビューの主な目的。 – Melvyn