如何在python / jinja的html页面上显示图像 [英] How to display images on html page from python/jinja

查看:687
本文介绍了如何在python / jinja的html页面上显示图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆