Zu Lernzwecken mache ich eine Webapp, die Plots mit Matplotlib erstellt, und ich möchte das Bild dieses Plots in das figure
-Feld des Plot-Modells speichern, aber wenn ich ein Plot mache, speichert es nur ein leeres Bild in das Verzeichnis /media/figures/
. Ich habe das so gemacht, wie es ein anderer Beitrag vorgeschlagen hat, aber es funktioniert nicht.
Weitere Informationen
Wenn ich das Plot mache, wird das Plot-Bild im Hauptverzeichnis meines Django-Projekts mit einem Namen wie <_io.StringIO object at 0xb1ac69ec>
gespeichert, aber wie gesagt, das Plot-Bild, das im Modell gespeichert wird, ist leer. Außerdem verwende ich Python 2.7 wenn das wichtig ist.
Die Datei, die Plots erstellt und Plot-Instanzen erstellt haben.
%Vor%Diagrammmodell
%Vor%Es gibt mehrere Probleme mit Ihrem Code:
Sie sollten die Figur nicht in StringIO
, sondern in io.BytesIO()
speichern. Dies liegt daran, dass der Inhalt der PNG-Datei kein von Menschen lesbarer Text ist, sondern Binärdaten.
Ein weiteres Problem ist, wie Sie die BytesIO
( StringIO
in Ihrem Code) handhaben, wenn Sie sie an savefig
übergeben. A BytesIO
ist nicht mit einer Datei verknüpft (das ist der springende Punkt, ein in-memory dateiähnliches Objekt zu haben), also hat es keinen Dateinamen - was Sie vermutlich damit erreichen wollen u'%s' % figure
ausdruck. Schreiben Sie stattdessen einfach in das dateiähnliche Objekt selbst.
Drittens, verwenden Sie django.core.files.images.ImageFile
anstelle von ContentFile
. Initialisieren Sie es auch mit dem BytesIO
-Objekt selbst, nicht mit seinem Byte-Wert.
Der relevante Teil Ihres Codes wird dann:
%Vor%Tags und Links python django matplotlib plot