Pregunta

Buenas tardes

Actualmente estoy tratando de construir algo increíblemente simple dentro del Google AppEngine. El objetivo es crear una aplicación sencilla para compartir fotos que se conecte de nuevo a la aplicación de mi iPhone. Todo es una experiencia de aprendizaje tanto para Python como para Objective-C.

(He sido programador de PHP durante bastante tiempo).

El objetivo, crear URL que tengan el siguiente aspecto: / img / {{model.key.id}}

El problema es que parece que no importa cómo hago el script de Python, termino con un error o simplemente no obtengo nada que mostrar en mi página de plantilla que está envuelta en la declaración FOR.

Mi archivo App.yaml:

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

Mi modelo (dentro de 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)

Mi clase para ver la página de imágenes:

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))

Intenté todo lo siguiente en mi clase, pero todos terminaron en fracaso. Los probé con key, key.name y key.id en la 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")

Mis URL:

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

La consulta de plantilla:

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

Parece que sería algo increíblemente simple y sé que me falta algo, pero no estoy seguro de dónde está. Escribiría esto en PHP, pero me gusta el concepto de AppEngine y como dije anteriormente, es una buena experiencia de aprendizaje de Python.

Como nota al margen, esta aplicación funciona en la página de inicio del sitio. Simplemente tengo una consulta GQL y las imágenes salen bien, simplemente falla cuando intento ir a las páginas / img / id.

¿Algún consejo chicos (y chicas)? Gracias de antemano!

ACTUALIZACIÓN # 1 :
Según la solicitud de Jonathan, la siguiente es la clase de imagen:

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")

Además, después de publicar esto, me di cuenta de que esto era parte del problema, ya que estaba tratando de hacer / img como la imagen real y / img / para mostrar la página de visualización. Desde entonces he cambiado esto y ahora tengo un modelo de trabajo. Pero se basa en la clave y no en key.id:

URL:

('/b/i', ViewPage)

Nueva clase de ViewPage:

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))

Entonces ... para acceder a la página Ver (que incluye comentarios y demás), ahora debe ir a la siguiente URL: / b / i? img_id = {{image.key}}

Al menos la página está funcionando ahora, pero preferiría que la página se parezca a la siguiente, como se indicó anteriormente: / b / img / {{image.key.id}}

Actualización # 2: clase ViewPage actualizada, así como URL's:

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))

Nueva URL:     ('/ b / image / ([- \ w] +)', ViewPageV2),

Las siguientes son dos capturas de pantalla, una de ellas es la prueba de id " 1 " existente y el error que viene con él actualmente.

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

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

Nuevamente, ¡Gracias a todos!

¿Fue útil?

Solución

Una forma sencilla de capturarlos a todos:

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

Para obtener más información, consulte Consultas en claves en los documentos de App Engine.

¿Está almacenando sus fotos con claves predefinidas ?

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

Entonces puede recuperarlo en su ViewPage:

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

Consulte Obtención de una entidad utilizando una clave .

Finalmente, para recuperar una foto basada en su clave asignada por un motor y suponiendo que esta clave esté presente en la URL ( por ejemplo , http: // host / b / img / ahByY. .. , así que cambie su plantilla para generar URL de este formulario), use

class ViewPage(webapp.RequestHandler):
  def get(self, id):
    photos = [ db.get(id) ]
    ...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top