Django - zwei Ansichten, eine Seite
Sagen, wir haben ein Django-Seite zeigt eine Liste der Elemente und ermöglicht dem Benutzer zum ausfüllen eines Formulars hinzufügen, um die Elemente (nennen wir die Elemente posts).
Was ich will:
Die URL für diese Seite bezieht sich auf eine Ansicht. Die Ansicht ruft zwei anderen Ansichten (genannt "sub-view" - Homepage), dann wird jeder sub-view rendert seinen Bereich und gibt die Ergebnisse zurück. Die Hauptansicht verknüpft dann die Ergebnisse der sub-views und zurück.
Im Idealfall würde ich eine schnelle javascript aktivieren Sie auf der Seite, wenn javascript aktiviert ist, wird der submit-button für das Formular "Ajax würde" der sub-Ansicht, die sich mit der form hinzufügen, und die Seite wird aktualisiert und so. Ich glaube, ich könnte trigger eine Anfrage zur Aktualisierung der Liste der Beiträge danach zu oder etwas.
Also wie füge ich die zwei sub-Ansichten bei der Hauptansicht? Ist das möglich?
UPDATE: "sub-view" ist ein Begriff, den ich mir ausgedacht habe. Was ich will ist eine Ansicht, die aufgerufen werden können, entweder per Ajax direkt zurückgeben, etwas sinnvolles, oder aus einer anderen Ansicht (die ich nenne Sie mal die "main view"). Wenn von dieser "main view", wie der Hauptansicht Griff Rücksendung der Daten aus mehreren "sub-views"?
Gibt es eine einfache Möglichkeit, dies zu tun? Ist das ein entsprechenden denken über mehrere views auf einer Seite? Sollte es mich kümmern, über die Trennung von Verantwortlichkeiten?
InformationsquelleAutor der Frage bharal | 2012-05-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Blick in django ist nur einer kündbaren, letztlich gibt ein Response-Objekt. Innerhalb dieser Ansicht, Sie könnten teilen Sie die Arbeit in jeder Organisation, der zu Ihnen passt. Vielleicht ist Ihre Ansicht 100% der Delegierten aus anderen Methoden.
In Ihrem Fall, Ihre Hauptansicht nennen würde, 2 andere Funktionen für Daten. Diese könnte auch sein Blick auf, wenn Sie akzeptieren auch ein Request-Objekt, wie gut und nutzen es. Sie würden auch brauchen, um wieder-Response-Objekte werden als django gesehen, da das ist, wie würden Sie zeigen URLs an. Aber es nicht wirklich tun Sie etwas gutes haben zwei andere Ansichten geben Ihnen Antwort-Objekte. Was Sie wahrscheinlich wollen, nur andere Methoden, die bestimmte Aufgaben und wieder einige Daten-Struktur, oder vielleicht sogar ein snippet gerendert von einer Vorlage. Sie würden dann verwenden Sie diese Daten, oder führen die template-strings zusammen und zurückzukehren, in Ihre wichtigsten Antwort.
Wenn Sie wirklich setzen auf die Verwendung von anderen Ansichten, dass die Rückgabe Response-Objekte, dann können Sie etwas tun, wie greifen Sie den Körper aus und fasst Sie in Ihre eigene Reaktion:
https://docs.djangoproject.com/en/1.4/ref/request-response/
Wirklich, nichts ist viel anders als in den tutorials. Sie sind nur den Aufruf von anderen Methoden für die Daten. Wenn Sie möchten, machen Sie es organisiert, sollten Sie separate Daten-Verarbeitung die Logik aus dem view-Funktion. Ihre Hauptansicht rufen würde, diese Daten-Verarbeitung Funktionen für die Werte. Und Ihre "sub-views" wäre nur einfach Ansichten, die rufen auch diese individuellen Daten, Funktionen und wickeln Sie Sie in eine Antwort.
Pseudo:
InformationsquelleAutor der Antwort jdi
Den Ansichten enthalten sollte nur anzeigen-bezogene Logik:
Berechnungen auslagern, um Sie wiederverwendbar und rufen Sie diese Methoden in Ihren Ansichten zu, halten Sie Sie klein.
Dennoch, vielleicht möchten Sie etwas anderes, nämlich Vorlagen mit
erweitert
undinclude
.Mit
extends
Sie sind in der Lage, erstellen Sie ein Basis-layout für Ihre HTML-code und definieren bestimmte Blöcke die gerendert werden kann anderswo. Beispiel? Ok.base.html:
Dann, in jeder anderen Vorlage, können Sie überschreiben die Blöcke
title
undcontent
die wir definiert in der Basis-Vorlage:Können, können Sie auch erstellen Sie sub-templates wie die folgende, nennen wir es
_item.html
:Können Sie das snippet in jede andere Vorlage, und übergeben Sie eine beliebige Anzahl von Parametern:
Natürlich können Sie kombinieren beider Konzepte. Etwa so:
Ich hoffe, das hilft.
InformationsquelleAutor der Antwort Alp
Dies ist die perfekte Zeit, um einzuführen class based views.
Klasse Methoden sind im wesentlichen die "sub-views", die split-Logik in wiederverwendbaren Codefragmente.
Wenn Sie möchten, dass die Lesbarkeit der split-Funktionen - es wird nur besser durch die Verwendung von django s, class based views (die über alle Funktionen, die standardmäßig angeboten werden und Zugriff auf die Anfrage -, kwargs, args, etc., über die Klasse-Instanz).
Die docs enthalten auch ein gutes Beispiel für die Rückgabe eines JSON-Antwort-oder HTML-Antwort, basierend auf request-Parameter (exakt diese situation).
Der beste Teil? Sie können verwenden Sie Ihre class-based views als Mixins in Verbindung, in Zukunft Ansichten. Blick auf die docs Beispiel, um zu sehen, wie konvertieren von beliebigen class-based view zu behandeln, eine JSON-Antwort von der Vorlage Zusammenhang über eine einfache Unterklasse.
InformationsquelleAutor der Antwort Yuji 'Tomita' Tomita