简体   繁体   中英

google app engine with django retrieve item by key from a template to a view

i have this small problem with google app engine i want to retrieve images from datastore , my function is 100 percent working if i enter the key inside the code on the other hand if i get as a parameter it would give me BadKeyError

here is the form

        {% for image in image.all %}
            <li>{{ image.title }}  </li>
            <img src='getImage?key={{image.key}}' height="100" />   

maped to

def getImage(request,key):
image = Image()
request.encoding = 'koi8-r'
image = db.get(key) 
#build your response
response = HttpResponse(image.blob)
# set the content type to png because that's what the Google images api 
# stores modified images as by default
response['Content-Type'] = 'image/png'
# set some reasonable cache headers unless you want the image pulled on every    request
response['Cache-Control'] = 'max-age=7200'
return response  

I created something simliar to what you want to achieve.. Hope this helps

image.py

import os
from google.appengine.ext import db
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
from google.appengine.ext.webapp.util import run_wsgi_app
class Profile(db.Model):
                image=db.BlobProperty()
class disp_image(webapp.RequestHandler):       
                def get(self): 
                    key = self.request.get('key')
                    image = Profile.get(key)
                    self.response.headers['Content-Type'] = "image/png"
                    return self.response.out.write(image.image)
class MainPage(webapp.RequestHandler):
    def get(self):
        image = self.request.get('image')
        pro=Profile()
        if image:   
            pro.image = db.Blob(image)
            import logging
            logging.info('persisted')
            pro.put()
        prof=Profile().all()

        return self.response.out.write(template.render('view.html',{'prof':prof}))
    def post(self):
        return MainPage.get(self)
application = webapp.WSGIApplication([
  ('/', MainPage),
  ('/disp', disp_image)
], debug=True)
def main():
  run_wsgi_app(application)
if __name__ == '__main__':
  main()

view.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form enctype="multipart/form-data" method="post" action="/">
<input type="file" name='image'/>
<input type='submit' value="submit"/>
{% for prof in prof %}
<img src="/disp?key={{prof.key}}" />
{% endfor %}
</form>
</body>
</html>

app.yaml

application: sample-app
version: 1
runtime: python
api_version: 1

handlers:
- url: /.*
  script: image.py

url

>>> req.host
'localhost:80'
>>> req.host_url
'http://localhost'
>>> req.application_url
'http://localhost/blog'
>>> req.path_url
'http://localhost/blog/article'
>>> req.url
'http://localhost/blog/article?id=1'
>>> req.path
'/blog/article'
>>> req.path_qs
'/blog/article?id=1'
>>> req.query_string
'id=1'

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM