如何在python / jinja的html页面上显示图像 [英] How to display images on html page from python/jinja
问题描述
我在 model.py 中创建了类 Blog
,并且它具有属性 photo
这是一个 BlobkeyProperty
。
我的问题是如何在html页面上显示该照片..我所得到的只是key.I不知道Jinja和python的太多,所以请帮助..:)
{%if blog.photo == None%}
< img src =static / css / img / photo.jpg/><<<峰; br />
{%elif blog.photo%}
< span> {{blog.photo.key.get()}}< / span>< br />
{%endif%}
第一部分正在工作,但其他部分现在给出me
内部服务器错误(UndefinedError:'google.appengine.api.datastore_types.BlobKey object'has no attribute'key')
如果我删除 key.get()
部分,然后它给我的照片 blobkey
plese帮助..
1处理图片的处理程序:
$ b 处理图片的处理程序 $ b
class AvatarDownloadHandler(BaseHandler):
处理用户头像的处理程序
def get(self):
params = {}
如果self.request.get('id')!='':
logging.info ('从ID加载图像:%s'%self.request.get('id'))
user_info = self.user_model.get_by_id(long(self.request.ge t'('id')))
if user_info!= None:
if user_info.picture:
self.response.headers ['Content-Type'] ='image / png'
self.response.out.write(user_info.picture)
else:
self.response.headers ['Content-Type'] ='text / plain'
self.response .out.write('No image')
else:
self.response.headers ['Content-Type'] ='text / plain'
self.response.out.write( '没有图像ID')
有了这个处理程序,然后在Jinja / HTML一侧,具有ID参数的下载处理程序的URL,即:
给定路线:
RedirectRoute('/ img /',handlers.AvatarDownloadHandler,name ='img-download',strict_slash = True),
JINJA / HTML使用:
< img src =/ img /? ID = 5671617594130432\" >
1用于上传图片的处理程序:
<$ p class AvatarUploadHandler(BaseHandler):
编辑用户头像的处理程序
@user_required
def post (self):
处理上传
params = {}
如果不是self.user:
返回self.render_template('home。如果不是self.form.validate():
message = _(messages.saving_error)
self.add_message(message,'danger')
返回self.redirect_to('edit-profile')
picture = self.request.get('picture')
user_info = self.user_model.get_by_id(long(self.user_id))
如果user_info!= None:
#转换图片
avatar = images.resize(picture,width = 200,height = 200,crop_to_fit = True,quality = 100)
user_info.picture =头像
user_ info.put()
message = _(messages.saving_success)
self.add_message(message,'success')
self.redirect_to('edit-profile')
message = _(messages.saving_error)
self.add_message(message,''')'
返回self.redirect_to('edit-profile')
@ webapp2.cached_property
def form(self):
f = forms.AvatarForm(self)
return f
I have created the class Blog
in model.py and in that it has an attribute photo
which is a BlobkeyProperty
.
My problem is how to diplay that photo on html page.. all I am getting is just key.I do not know much of Jinja and python so please help.. :)
{% if blog.photo == None %}
<img src="static/css/img/photo.jpg" /><br/>
{% elif blog.photo %}
<span>{{blog.photo.key.get()}}</span><br/>
{% endif %}
the first part is working but the else part is now giving me
Internal Server Error(UndefinedError: 'google.appengine.api.datastore_types.BlobKey object' has no attribute 'key')
If I remove the key.get()
part then it is giving me the blobkey
of that photo
plese help..
This is what I do for handling images from blobstore.
1 Handler for serving images:
class AvatarDownloadHandler(BaseHandler):
"""
Handler for Serve User's Avatar
"""
def get(self):
params = {}
if self.request.get('id') != '':
logging.info('loading image from id: %s' % self.request.get('id'))
user_info = self.user_model.get_by_id(long(self.request.get('id')))
if user_info != None:
if user_info.picture:
self.response.headers['Content-Type'] = 'image/png'
self.response.out.write(user_info.picture)
else:
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('No image')
else:
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('No image ID')
Having this handler, then in Jinja/HTML side I just call the routing URL for download handler with the ID parameter, i.e.:
Given route:
RedirectRoute('/img/', handlers.AvatarDownloadHandler, name='img-download', strict_slash=True),
JINJA/HTML uses:
<img src="/img/?id=5671617594130432">
1 Handler for uploading images:
class AvatarUploadHandler(BaseHandler):
"""
Handler for Edit User's Avatar
"""
@user_required
def post(self):
""" Handles upload"""
params = {}
if not self.user:
return self.render_template('home.html', **params)
if not self.form.validate():
message = _(messages.saving_error)
self.add_message(message, 'danger')
return self.redirect_to('edit-profile')
picture = self.request.get('picture')
user_info = self.user_model.get_by_id(long(self.user_id))
if user_info != None:
# Transform the image
avatar = images.resize(picture, width=200, height=200, crop_to_fit=True, quality=100)
user_info.picture = avatar
user_info.put()
message = _(messages.saving_success)
self.add_message(message, 'success')
self.redirect_to('edit-profile')
message = _(messages.saving_error)
self.add_message(message, 'danger')
return self.redirect_to('edit-profile')
@webapp2.cached_property
def form(self):
f = forms.AvatarForm(self)
return f
这篇关于如何在python / jinja的html页面上显示图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!