Django: Mehrere Images anzeigen lassen

Django, Flask, Bottle, WSGI, CGI…
Antworten
SancezZ
User
Beiträge: 11
Registriert: Sonntag 5. Juni 2011, 16:32

Hallo Ich probiere gerade bischen mit Django herrum.

Ich habs momentan hinbekommen Bilder/Images in meine Datenbank zu Laden und kann mir auch ein Image ausgeben lassen.
Vielleicht kann mir Jemand helfen, wie ich mir alle Bilder anzeigen lassen kann.

Code: Alles auswählen

#models.py
from google.appengine.ext import blobstore
from google.appengine.ext import db

class PhotoItem(db.Model):
    name = db.StringProperty()
    photo = blobstore.BlobReferenceProperty()

Code: Alles auswählen

#views.py
def show_photo(request):
    item = PhotoItem.all()[0]
    key = str(item.photo.key())
    
    url = images.get_serving_url(key)
    
    template = 'show.html'
    data = { 'photo':url}
    
    
    return render_to_response (template ,data,RequestContext(request))

mfg SancezZ
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

SancezZ hat geschrieben:Vielleicht kann mir Jemand helfen, wie ich mir alle Bilder anzeigen lassen kann.

Code: Alles auswählen

#views.py
def show_photo(request):
    item = PhotoItem.all()[0]
    [...]
Du solltest nicht nur die Daten für ein Bild abrufen, sondern alle. Mit dem "[0]" schränkst du explizit die Menge ein.

Dem Template kannst du dann statt wie bisher nur einen Wert die komplette Liste übergeben. Ich setze den Umgang mit Listen in Python und in Django-Templates jetzt mal als bekannt voraus.
SancezZ
User
Beiträge: 11
Registriert: Sonntag 5. Juni 2011, 16:32

Ja stimmt hab da wohl bischen aufn schlauch gestanden ...

Jetzt Klappt es auch ^^

Danke für den Denkanstoß
SancezZ
User
Beiträge: 11
Registriert: Sonntag 5. Juni 2011, 16:32

Nun möchte ich die gespeicherten Bilder verändern.

Mein Gedankengang aus der url ein Imagefile zu generieren um dies zu verändern.

Code: Alles auswählen

img = images.Image(url)
img.resize(width=50, height=80)
gibt es so eine möglichkeit mir dies im Template anzeigen zu lassen
bzw gibs eine Funktion um wieder zurück auf eine url zu kommen?
deets

@SancezZZ

So geht das nicht. Was du brauchst ist doch einfach nur genau derselbe code, wie du ihn schon zum ausliefern eines konkreten Bildes hast. Damit holst du doch schon ein Bild aus der Datenbank - und genau das willst du jetzt doch auch machen.

Mit dem Bild kannst du dann tun und lassen was du willst.
SancezZ
User
Beiträge: 11
Registriert: Sonntag 5. Juni 2011, 16:32

Du meinst diesen Code

Code: Alles auswählen

def show_photo(request):
    item = PhotoItem.all()[0]  
    key = str(item.photo.key())    
    url = images.get_serving_url(key)
... 
Damit hole ich mir ja das Bild bzw die Url aus der Datenbank.

Ich hab hier ja in diesem Sinne noch kein Bild mit diesem ich rumspielen kann ...
deets

@SanceZZ

Aber du hast doch auch code, der ein Bild wirklich *darstellt*, also der aufgerufen wird, wenn die URL die aus "images.get_serving_url(key)" rausfaellt dann vom Browser aufgerufen wird.
SancezZ
User
Beiträge: 11
Registriert: Sonntag 5. Juni 2011, 16:32

Glaube Nein
aber der Code der das image darstellt wäre ja dann dieser

Code: Alles auswählen

img = images.Image(url)
img.resize(width=50, height=80)
Aber selbst dann kann ich es ja keinen Template Übergeben/Anzeigen ohne es in die Datenbank zu packen
deets

Ich glaube wir reden hier aneinander vorbei.

Du hast doch eine Seite gerendert, auf der Links zu allen moeglichen deiner PhotoItems sind. Wozu sind denn diese einzelnen Links gut, und wann benutzt du PhotoItem.photo?
SancezZ
User
Beiträge: 11
Registriert: Sonntag 5. Juni 2011, 16:32

Wahrscheinlich macht mir wiedermal der BlobStore von google bzw die Hitze alles zu schwer ^^

Ich weis gerade überhaupt nicht was du für eine Seite meinst
deets

Na, der Sinn & Zweck deiner ganzen Uebung hier zu Beginn war doch, eine Seite mit links zu oder gleich den Images selbst zu rendern. Dieses "show_photo". Was kommt denn da genau raus?

Oder nochmal anders: gibt es *irgendwo* in deinem Programm eine URL die man aufrufen kann, und dann wird das *BILD* dargestellt, also wirklich das Bild, mit bunten Pixeln und so?
SancezZ
User
Beiträge: 11
Registriert: Sonntag 5. Juni 2011, 16:32

Ich sprech jetzt erstmal von dem einfachen bsp ohne schleifen etc

Die show_photo sendet mit ein "object"/die URL davon, was in meiner DB drin liegt an meine show.html

und diese zeigt mir das Bild dann an

Code:show.html

Code: Alles auswählen

<img src="{{photo}}" />

Ich glaub ich weis so ungefair wo der fehler liegt.

ich benutze Blobstore.BlobReferencesProperty(9 um files zu Speichern
Das was ich bisher herrausgefunden hab bzw die meisten sagen ist,
es ist mit db.blobProperty() einfacher

nur hab ich gerade keine ahnung wie ich dies verwende ^^
deets

Ah, ok. Du kuemmerst dich also selbst gar nicht darum.

Aber du hast doch nen key, warum kannst du denn nicht PhotoItem.get(key) machen? Oder sowas aehnliches, wie auch immer Django das macht.

Und dann hast du dein PhotoItem mit dem Blob, da muss man doch an die Binaerdaten rankommen. Nur noch mit Image.load(StringIO(data)) versehen, und fertig.
SancezZ
User
Beiträge: 11
Registriert: Sonntag 5. Juni 2011, 16:32

An key ids etc komme ich ohne größere Probleme herran
das reine Anzeigen der Bilder Funktioniert

Nun möchte ich diese halt verändern
Ich kann mir ja wie oben schon beschrieben aus der url ein image generieren um dies zu bearbeiten.

Um jetzt wieder das Problem zu haben, dass ich nicht weis wie ich es mir ausgeben/anzeigen lassen kann


habe schon überlegt es in die DB zu packen aber das wäre dann zuviel des guten ^^
deets

Noe, ist es nicht. Das Bild zu bearbeiten ist wahrscheinlich relativ teuer, also macht man das nur einmal, und speichert es in einer DB. Wuerde ich zumindest so machen.
SancezZ
User
Beiträge: 11
Registriert: Sonntag 5. Juni 2011, 16:32

Ich danke allen die sich auch wegen mir den Kopf zerbrochen haben.

Mein aktuelles Testprojekt läuft
http://uploadsancezz.appspot.com/

sieht zwar nicht schön aus aber es funktioniert ^^

Hab jetzt anstelle des

Code: Alles auswählen

photo = blobstore.BlobReferenceProperty()
dies

Code: Alles auswählen

photo= db.blobProperty() 
genommen

und Images aus Django herraus Anzeigen geht auch recht einfach mit

Code: Alles auswählen

return Httpresponse(img, mimetype="image/jpeg")

Wollte jetzt eigentlich noch eine downloadFunktion einbauen aber da weis ich noch nicht wies geht.
Antworten