Klassenbasierte generische Ansichten zusätzlicher Kontext

8

Vor klassenbasierten Ansichten gab es ein Schlüsselwort extra_context, das in urlsconf übergeben werden kann. Ссылка

Wenn wir nun mit klassenbasierten generischen Sichten arbeiten wollen, müssen wir die generische Sicht ableiten Ссылка

Wenn wir etwas Einfaches wollen, und wir verwenden das generische CreateView und UpdateView. Diese Herangehensweise wird dazu zwingen, für etwas, das vorher trivial war, Unterklassen zu bilden. Mehr noch, wir müssen das DRY-Prinzip brechen, indem wir es zweimal machen.

Warum ist es so? Gibt es einen Grund, warum wir den zusätzlichen Kontext nicht direkt an die Vorlage übergeben können?

Danke

    
fariza 11.02.2013, 17:19
quelle

3 Antworten

14

Nach zu vielen Gedanken ist die einzige Antwort NEIN, dass die Funktionalität entfernt wurde.

Und die Dokumentation erwähnt nicht die "Entfernte Eigenschaft" und es gibt keine Erklärung, warum es so war.

Aber um mein Leben zu erleichtern, nahm ich den Rat von @aidan und änderte ein wenig

%Vor%

Jetzt habe ich semi-generische Ansichten, die ich direkt in der URLSconf verwenden kann, und übergebe extra_context dict an den Aufruf as_view ()

%Vor%     
fariza 12.02.2013, 16:36
quelle
8

Ich denke, es ist nicht ganz so einfach, aber es sind immer noch nur 5 Codezeilen -

%Vor%

Wenn Sie diese Funktionalität wirklich mit klassenbasierten Ansichten möchten, dann könnten Sie die Klasse vielleicht erweitern, um sie hinzuzufügen -

%Vor%

Dann benutze es in deiner url_conf -

%Vor%

Sie könnten Ihre eigenen CreateView, DetailView, ListView usw. schreiben und sie in jedes Projekt, das Sie machen, importieren.

    
Aidan Ewen 11.02.2013 18:02
quelle
5

Als ich die obigen Antworten las, schien es, dass dieser Ansatz, während er das Problem löste, im Wesentlichen ein Hack war, um alte Funktionalität zurückzubringen. Ein wenig googeln brachte die generischen klassenbasierten Ansichten Seite , die einen Abschnitt mit dem Titel " zusätzlichen Kontext hinzufügen . " Um es hier zusammenzufassen, besteht die Lösung einfach darin, Ihre eigene Version von get_context_data() zu implementieren, die die Variablen enthält, die Sie an die Vorlagen übergeben möchten:

%Vor%

Der größte Vorteil besteht darin, dass Sie urls.py nicht auf alle Arten von Kontextargumenten "hacken" müssen. Sie können alle Funktionen klassenbasierter Ansichten nutzen, während Sie weiterhin benutzerdefinierte Kontextinhalte bereitstellen .

    
eykanal 16.02.2015 02:40
quelle

Tags und Links