2016-09-20 2 views
0

Ich kam von CakePHP und begann gerade mit Django-Framework zu spielen. In CakePHP habe ich die Angewohnheit, das gesamte zurückgegebene Array mit pr() direkt auf die Webseite auszugeben. Zum Beispiel:Wie Abfrage Ergebnis in Python/Django

  • Ein Controller spuckt ein $ Ergebnis einen Blick aus, verwende ich pr ($ result) und es wird alles drucken direkt auf der Webseite, damit ich weiß, wie man durch $ resultiert aus meiner Sicht zu reisen.
  • Ein Formular POST eine $ Anfrage an einen Controller, ich benutze pr ($ Anfrage), um zu sehen, was sendet, bevor Sie es in der Steuerung verarbeiten. Der Inhalt von $ request wird sofort auf der Webseite angezeigt, direkt nachdem ich auf "Submit the form" geklickt habe.

ich mich, wenn ich die gleiche Sache in django tun könnte stattdessen an die Schale zu gehen und versuchen pprint (oder könnte ich nur pprint, um das Web zu drucken verwenden ???) Dies ist ein wirklich einfaches Beispiel über das, was ich rede: app_name/views.py:

def detail(request, soc_id): 
    soc = get_object_or_404(Soc, pk=soc_id) 
    return render(request, 'socs/detail.html', {'soc': soc}) 

Wie kann ich nur deutlich, was in "soc" ist. In CakePHP könnte ich gerade pr ($ soc) genau dort und es wird direkt auf der Detail.html Seite angezeigt werden.

Ich habe dies versucht und es hat nicht funktioniert (ich bin sicher, dass es grundlegende, aber ich bin auf diese gerade neu)

import pprint 
def detail(request, soc_id): 
    soc = get_object_or_404(Soc, pk=soc_id) 
    pprint.pprint(soc) 
    return render(request, 'socs/detail.html', {'soc': soc}) 

ich zwei Tage verbracht haben, zu forschen, aber ich konnte nicht finden die Antwort. Ich hoffe, dass einer von euch diesem Neuling helfen kann.

Antwort

0

Die Art, wie Sie drucken möchten, zeigt den Ausdruck im Terminal, auf dem Ihr Django-Server ausgeführt wird. Wenn Sie es nur schnell sehen müssen, überprüfen Sie dort.

Wenn Sie den Wert auf der gerenderten Seite ausgeben möchten, müssen Sie ihn in die Vorlage mithilfe von Vorlagen-Tags einfügen. Es sieht so aus, als ob Sie {'soc': soc} als Kontext an Ihre Vorlage senden. Aus diesem Grund sollten Sie es in Ihrer Vorlage verwenden können. Also, in Ihrer Vorlage (socs/detail.html), fügen Sie einfach {{ soc }} irgendwo hinzu und es sollte den Wert ausdrucken. Die Vorlage hat vollen Zugriff auf das Objekt. Wenn Sie also etwas Bestimmtes möchten, können Sie stattdessen auch dieses drucken (z. B. {{ soc.id }}).

Wenn Sie alles sehen möchten, was sich im Objekt befindet, ohne alle verschiedenen Felder selbst anzugeben, senden Sie OBJECT.__dir__. Zum Beispiel würden Sie hierfür {'soc': soc.__dir__} als Ihren Kontext senden. Denken Sie daran, dass dies wahrscheinlich für nichts anderes als Inspektion von Ihnen verwendet werden sollte.

Wenn Sie mehr über Djangos Templating erfahren möchten, werfen Sie einen Blick auf the syntax and more.

+0

Vielen Dank für Ihre Antwort. Ich weiß nicht, wie ich meinen Kommentar formatieren soll, also habe ich eine "aktualisierte Antwort" gepostet. –

+0

@HBui Ich habe meine Antwort aktualisiert. Hoffentlich ist es das, wonach Sie suchen. Es werden keine verschachtelten Relationen angezeigt. Wenn Sie also andere Objekte haben, zeigen sie möglicherweise nur an, was ihr __str __() 'definiert ist. – tredzko

+0

Das __str__ kam wirklich nah an meinen Zielort. Aber anstatt die Details von (soc) aufzuteilen, wie viele Datensätze zurück kamen, welche Felder zurückkamen, welcher Wert zu welchem ​​Feld gehört, wurde es aufgeteilt: "['prepare_database_save', 'DoesNotExist', '__class__', 'modified' , "__repr__", "__ne__", "_do_update", "speichern", "_check_local_fields", "was ich nicht brauche. Kein Feldname oder Werte darin. Ich hoffe ich mache Sinn. Ich schätze es sehr, dass du dir die Zeit genommen hast, mir zu helfen. –