Tipfy: Как отобразить блоб в шаблоне?

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

greeting.avatar = db.Blob(avatar)

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

2 ответа

Решение

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

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

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

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

  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==" />
    
Другие вопросы по тегам