【问题标题】:How to display images on html page from python/jinja如何从 python/jinja 在 html 页面上显示图像
【发布时间】:2015-08-05 05:43:44
【问题描述】:

我在 model.py 中创建了 Blog 类,它有一个属性 photo,即 BlobkeyProperty。 我的问题是如何在 html 页面上显示那张照片.. 我得到的只是关键。我对 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 %}

第一部分正在工作,但其他部分现在给了我

Internal Server Error(UndefinedError: 'google.appengine.api.datastore_types.BlobKey object' has no attribute 'key')

如果我删除 key.get() 部分,那么它会给我那张照片的 blobkey 请帮忙..

【问题讨论】:

  • 使用 get_serving_url 从您的 blob_key 创建一次服务 url。这个服务 url 可以在你的 img 标签的 src 中使用。文档:cloud.google.com/appengine/docs/python/images/functions
  • 非常感谢,但我不太了解(甚至从文档中)如何准确地使用它..!如果你能详细说明它会很棒.. :)
  • 您应该将视图中的代码添加到您的问题中,该代码将图像发送到模板。

标签: python-2.7 google-app-engine jinja2 blobstore internal-server-error


【解决方案1】:

这就是我为处理来自 blobstore 的图像所做的工作。

1 个用于提供图像的处理程序:

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

有了这个处理程序,然后在 Jinja/HTML 端,我只需使用 ID 参数调用下载处理程序的路由 URL,即:

给定路线:

RedirectRoute('/img/', handlers.AvatarDownloadHandler, name='img-download', strict_slash=True),

JINJA/HTML 用途:

<img src="/img/?id=5671617594130432">

1个上传图片的处理程序:

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

【讨论】:

  • 但是NameError: name 'BaseHandler' is not defined,为什么?请帮帮我
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-28
  • 1970-01-01
  • 2017-07-23
  • 2019-05-26
  • 2019-10-01
  • 2012-12-13
  • 1970-01-01
相关资源
最近更新 更多