Ich möchte Informationen über ein Objekt in vielen Ansichten einfügen, ohne es in get_context_data in jeder Ansicht zu wiederholen. Wie Sie verstehen, brauche ich eine Klasse mit get_context_data, die ich mit anderen Ansichten mischen kann. Hier in meinem Beispiel möchte ich in Zusammenhang mit UpdateAnotherObjectView ‚some_object‘ sehen:Wie kann man denselben Kontext in vielen verschiedenen Django-Ansichten einfügen?
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
es funktioniert, aber get_context_data ist nicht ein Teil der Eltern ‚Ansicht‘ Klasse. Kann ich brauchen mehr spezielle Klasse von in BaseObjectInfoView zu erben?
oder vielleicht besser, Kontext mit einer anderen Methode zu konstruieren?
Es ist sehr nett! Aber wie kann ich mit context mixin umgehen, wenn ich einige Objekte, die von view kwargs abhängen, im url pattern (ex. 'Object_pk') im Kontext platzieren muss? In meinem Beispiel habe ich Objekt mit pk = 1, aber PK-Mast wird von URL genommen. –
Das PK ist in 'self.kwargs' in der Ansicht verfügbar. Dies geschieht mit 'View.as_view()'. Aber [SingleObjectMixin] (http://ccbv.co.uk/projects/Django/1.11/django.views.generic.detail/SingleObjectMixin/), das Teil von 'DetailView' ist, wird die ganze harte Arbeit für Sie tun, wenn es ist das Hauptobjekt der Ansicht. – Melvyn