Tipfy:如何在模板中显示blob?

时间:2011-01-21 20:55:20

标签: python google-app-engine blob tipfy

给出了使用tipfy(python)的gae以下模型:

greeting.avatar = db.Blob(avatar)

用于显示blob的模板标签(此处为图像)是什么?

2 个答案:

答案 0 :(得分:2)

在这种情况下,blob是一个图像,这很棒。只需使用images.get_serving_url(blob_key)就可以了。我已经使用过这个功能了,相信我,它对于提供图像非常棒。只需将=sxx附加到xx是您想要的像素大小的网址。它会自动调整图像大小并为其提供服务。

如果斑点不是图像,那么你运气不好,这是一个简单的方法。也许使用BlobReader来创建一个字符串表示并输出它?

如果它不是图像或文本,那么您可能想要写入HTML?

答案 1 :(得分:1)

没有用于显示任意数据的内置模板标记。我可以想到两种方法:

  1. 为服务头像编写请求处理程序作为图像。根据您的示例,请求处理程序只需要查找问候语以获取图像数据,发送适当的Content-Type: image/jpeg(或image/png或其他)标头,然后将blob数据写入响应流

    然后,在您的模板中,您将显示如下图像:

    <img src="/show-avatar/{{ greeting.key().id() }}">
    
  2. 编写一个自定义模板标记/模板过滤器,用于获取blob数据并生成适当的data URL,它会直接在您生成的HTML文档中对图像数据进行编码。

    然后,在您的模板中,您将显示如下图像:

    <img src="{{ greeting.avatar|dataurl }}">
    

    会导致模板中这些行的输出:

    <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9YGARc5KB0XV+IAAAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAF1JREFUGNO9zL0NglAAxPEfdLTs4BZM4DIO4C7OwQg2JoQ9LE1exdlYvBBeZ7jqch9//q1uH4TLzw4d6+ErXMMcXuHWxId3KOETnnXXV6MJpcq2MLaI97CER3N0vr4MkhoXe0rZigAAAABJRU5ErkJggg==" />