Tipfy: Как отобразить блоб в шаблоне? - PullRequest
3 голосов
/ 21 января 2011

Данные приведены с использованием tipfy (python) следующей модели:

greeting.avatar = db.Blob(avatar)

Что такое шаблон-тег для отображения BLOB-объекта (здесь изображение)?

Ответы [ 2 ]

2 голосов
/ 22 января 2011

В этом случае капля - это изображение, и это здорово.Просто используйте images.get_serving_url(blob_key) и вы счастливы.Я использовал эту функцию, и поверьте мне, она великолепна для показа изображений.Просто добавьте =sxx к URL, где xx - это нужный вам размер пикселя.Он автоматически изменяет размер изображения и обслуживает его.

Если BLOB-объект не является изображением, то вам не повезло, если бы у вас был простой выход.Может быть, использовать BlobReader, чтобы создать строковое представление и вывести его?

Если это не изображение или текст, что вы можете написать в HTML?

1 голос
/ 22 января 2011

Нет встроенного тега шаблона для отображения произвольных данных, подобных этому.Я могу думать о двух подходах:

  1. Написать обработчик запросов для обслуживания аватаров в качестве изображений.Исходя из вашего примера, обработчик запросов должен просто просмотреть приветствие, чтобы получить данные изображения, отправить соответствующий заголовок Content-Type: image/jpeg (или image/png или любой другой) и затем записать данные большого двоичного объекта в поток ответов.

    Затем в вашем шаблоне вы должны отобразить изображение следующим образом:

    <img src="/show-avatar/{{ greeting.key().id() }}">
    
  2. Написать собственный шаблонный тег / фильтр шаблона, который принимает данные BLOB-объектов и генерирует соответствующие URL данных , который будет кодировать данные изображения непосредственно в генерируемом вами HTML-документе.

    Затем в вашем шаблоне вы отобразите изображение примерно так:

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

    , что приведет к выводу по шаблону в следующих строках:

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