Frage

Guten Tag,

Ich versuche zur Zeit etwas unglaublich einfach innerhalb der Google App Engine zu bauen. Das Ziel ist es, eine einfache Foto-Sharing-Anwendung zu erstellen, die zurück zu meiner iPhone-Anwendung verbinden. Es ist alles eine Lernerfahrung für beide Python und Objective-C.

(Ich habe ein PHP-Programmierer schon seit geraumer Zeit gewesen).

Das Ziel, erstellen URLs, die wie folgt aussehen: / Img / {{model.key.id}}

Das Problem ist, dass es egal scheint, wie ich das Python-Skript zu tun, ich entweder mit einem Fehler am Ende oder einfach nichts bekommen auf meiner Vorlage Seite anzuzeigen, die in der FOR-Anweisung eingewickelt wird.

Meine app.yaml Datei:

application: randomwebappname
version: 1
runtime: python
api_version: 1

handlers:
- url: /media
  static_dir: media

- url: /b/.*
  script: beta.py
  login: required

- url: /.*
  script: main.py

My Model (innen beta.py):

class Photo(db.Model):
    author = db.StringProperty()
    title = db.StringProperty()
    slugline = db.StringProperty()
    content = db.StringProperty(multiline=True)
    coordinates = db.StringProperty()
    avatar = db.BlobProperty()
    date = db.DateTimeProperty(auto_now_add=True)

Meine Klasse für die Anzeige der Bildseite:

class ViewPage(webapp.RequestHandler):
def get(self, id):


template_values = {
    'image': image,
}

path = os.path.join(os.path.dirname(__file__), 'templates/view.html')
self.response.out.write(template.render(path, template_values))

Ich habe versucht, alle folgenden in meiner Klasse, aber sie alle Ende mit einem Mißerfolg. Ich versuchte, sie mit Schlüssel, key.name und key.id in der URL:

photos = db.Query(Photo).filter('key', slug).fetch(limit=1)

photos = Photo.get_by_key_name(id)

photos = Photo.get_by_key_name(key)

key = db.Key.from_path('Photo', id) 

photos = db.GqlQuery("SELECT * FROM Photo WHERE __key__ = :key", key=key)

photos = db.get(photo_key)

photos = self.request.get("id")

Meine URL:

application = webapp.WSGIApplication([
    ('/b/', HomePage),
    ('/b/upload', UploadPage),
    ('/b/add', MainPage),
    ('/b/img', Image),
    ('/b/img/([-\w]+)', ViewPage),
    ('/b/submit', Submission)
], debug=True)

Die Vorlage Abfrage:

{% for photo in photos %}
<img alt="" title="" src="img?img_id={{ photo.key }}" alt="main image" />
{% endfor %}

Dies scheint, wie es wäre etwas unglaublich einfach und ich weiß, ich bin etwas fehlt, aber ich bin nur nicht sicher, wo es langgeht. Ich würde dies in PHP schreiben, aber Ich mag das Konzept der App Engine und ich habe oben gesagt, es ist eine gute Python Lernerfahrung.

Als Randnotiz, diese Anwendung auf der Homepage der Website funktioniert. Ich habe einfach eine GQL Abfrage habe, und es gibt die Bilder in Ordnung, es nicht nur, wenn ich versuche, die / img / id Seiten zu gehen.

Jede Beratung Jungs (und Mädels)? Vielen Dank im Voraus!

UPDATE # 1 :
Gemäß Jonathan Wunsch ist die folgende die Image-Klasse:

class Image (webapp.RequestHandler):
    def get(self):
        photo = db.get(self.request.get("img_id"))
        if photo.avatar:
            self.response.headers['Content-Type'] = "image/png"
            self.response.out.write(photo.avatar)
        else:
            self.response.out.write("No image")

Auch nach dieser Veröffentlichung, wurde mir klar, dass dieser Teil des Problems war, als ich versuche, als das eigentliche Bild zu tun / img und / img / die Ansichtsseite angezeigt werden soll. Ich habe dies inzwischen geändert und haben jetzt ein funktionierendes Modell. Aber es basiert auf dem Schlüssel und nicht Schlüssel.id:

URL:

('/b/i', ViewPage)

New Viewpage Klasse:

class ViewPage(webapp.RequestHandler):
    def get(self):
    image = db.get(self.request.get("id"))  

    template_values = {
        'image': image,
    }

    path = os.path.join(os.path.dirname(__file__), 'templates/view.html')
    self.response.out.write(template.render(path, template_values))

So ... auf der Seite Ansicht zu erhalten (die Kommentare und solche umfasst), Sie müssen nun auf die folgende URL: / B / i? Img_id = {{image.key}}

Zumindest die Seite funktioniert jetzt, aber ich würde viel lieber die Seite wie folgt aussehen zu erhalten, wie oben erwähnt: / B / img / {{image.key.id}}

Update # 2: View Klasse sowie URL aktualisiert:

class ViewPageV2(webapp.RequestHandler):
    def get(self, id):
    images = [ db.get(id) ]

    template_values = {
        'image': image,
    }

    path = os.path.join(os.path.dirname(__file__), 'templates/view.html')
    self.response.out.write(template.render(path, template_values))

Neue URL:     ( '/ B / image / ([- \ w] +)', ViewPageV2)

Im Folgenden ist zwei Screenshots mit einem zu seinem Beweis-ID „1“ bestehende und der Fehler, der zur Zeit mit ihm kommt.

alt text http://img215.imageshack.us/img215/9123/screenshot20091130at937 .png

alt text http://img215.imageshack.us/img215/2207/screenshot20091130at938 .png

Wieder Dank Alle!

War es hilfreich?

Lösung

Eine einfache Art und Weise zu greifen, sie alle:

photos = Photo.gql('ORDER BY __key__')

Für mehr finden Sie unter Abfragen auf Keys in der App Engine-Dokumentation.

Speichern Sie Ihre Fotos mit vordefinierten Tasten ?

photo = Photo(key_name="xzy123")
photo.put()

Dann können Sie es in Ihrem View abrufen:

photos = [ Photo(key_name="%s" % id) ]

Siehe Erste eine Entity einen Key Verwendung .

Schließlich ein Foto abzurufen auf der Grundlage seiner appengine zugewiesenen Schlüssel und diesen Schlüssel unter der Annahme, in der URL vorhanden ist ( zB , http://host/b/img/ahByY..., so ändern Sie Ihre Vorlage URLs dieser Form zu erzeugen), Verwendung

class ViewPage(webapp.RequestHandler):
  def get(self, id):
    photos = [ db.get(id) ]
    ...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top