Tipfy: Как отобразить блоб в шаблоне?
Данные приведены с использованием tipfy (python) следующей модели:
greeting.avatar = db.Blob(avatar)
Что такое шаблон-тег для отображения блоба (здесь изображение)?
2 ответа
В этом случае капля - это изображение, и это здорово. Просто используйте images.get_serving_url(blob_key)
и ты счастлив. Я использовал эту функцию, и поверьте мне, она великолепна для показа изображений. Просто добавить =sxx
на адрес где xx
желаемый размер пикселя Он автоматически изменяет размер изображения и обслуживает его.
Если капля не является изображением, то вам не повезло с легким выходом. Может быть, использовать BlobReader
сделать строковое представление и вывести его?
Если это не изображение или текст, что вы можете написать в HTML?
Нет встроенного тега шаблона для отображения произвольных данных, подобных этому. Я могу думать о двух подходах:
Напишите обработчик запроса для обслуживания аватаров в качестве изображений. Исходя из вашего примера, обработчик запросов должен просто найти приветствие, чтобы получить данные изображения, отправить соответствующий
Content-Type: image/jpeg
(или жеimage/png
или что-то еще), а затем записать данные большого двоичного объекта в поток ответов.Затем в вашем шаблоне вы бы отобразили изображение следующим образом:
<img src="/show-avatar/{{ greeting.key().id() }}">
Напишите пользовательский шаблонный тег / шаблонный фильтр, который принимает данные BLOB-объектов и генерирует соответствующий URL-адрес данных, который будет кодировать данные изображения непосредственно в создаваемом вами HTML-документе.
Затем в вашем шаблоне вы бы отобразили изображение примерно так:
<img src="{{ greeting.avatar|dataurl }}">
что приведет к выводу по этим линиям в шаблоне:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9YGARc5KB0XV+IAAAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAF1JREFUGNO9zL0NglAAxPEfdLTs4BZM4DIO4C7OwQg2JoQ9LE1exdlYvBBeZ7jqch9//q1uH4TLzw4d6+ErXMMcXuHWxId3KOETnnXXV6MJpcq2MLaI97CER3N0vr4MkhoXe0rZigAAAABJRU5ErkJggg==" />