Получить изображение для отображения из хранилища данных Google - PullRequest
0 голосов
/ 16 марта 2011

models.py

class Badge(db.Model):
user = db.ReferenceProperty(User, collection_name='user_badges')
skill = db.ReferenceProperty(Skill, collection_name='skill_badges')
points = db.FloatProperty(required=True)

class Skill(db.Model):
skill_id = db.StringProperty()
name = db.StringProperty()
description = db.StringProperty()
picture = db.BlobProperty(default=None)

class User(db.Model):
user_id = db.StringProperty(required=True)
nickname = db.StringProperty(required=False)
email = db.StringProperty(required=False)

views.py

user = common.get_user(request)
if not user:
    return auth_error(common.getHostURI(request), request)

HTML

{% for badge in user.user_badges %}
  {{ badge.skill.picture }}                            
{% endfor %}

Пример записи изображения в хранилище данных:

3601 байт, SHA-1 = b0a110a823d936d97dba83d5c8b32c7a078d3ac4

Как мне извлечь это изображение из хранилища данных> если я использую badge.skill.picture, он возвращает меня пустым.

EDIT: Это не работает:

return render_to_response(template_name, locals(), context_instance=RequestContext(request, params), mimetype="image/png")

Ответы [ 3 ]

4 голосов
/ 16 марта 2011

Вы не можете вставлять картинку прямо в шаблон;HTML не работает таким образом.Вам нужно будет встроить тег <img> с атрибутом src, который дает URL-адрес, на который ваше приложение ответит для предоставления URL-адреса.Я использую только часть шаблонов в Django, поэтому, если вы используете полный стек, вам придется перевести некоторые из этих идей, и я не могу с этим ничего поделать.что-то вроде этого:

{% for badge in user.user_badges %}
  <img src="/skill/get_picture/{{ badge.skill.key }}">                            
{% endfor %}

И вам понадобится маршрут, который обрабатывает / skill / get_picture /: id.Код контроллера, который вызывается для обработки этого маршрута, будет выглядеть примерно так:

from google.appengine.ext import db
from models import Skill

requested_skill = db.get(id) # id comes from the :id param in the URL
return HttpResponse(requested_skill.picture, mimetype="image/png")

Я думаю, что возврат HttpResponse с содержимым изображения может сделать то, что вы хотите.Вы определенно не хотите возвращать другой шаблон;Вы хотите вернуть данные изображения и все.

0 голосов
/ 17 марта 2011

Думаю, этот пост вам очень поможет store-jpg-gif-png-etc-it-gae-datastore

0 голосов
/ 16 марта 2011

Я согласен с методом Адама Кроссленда для большинства ситуаций, но если изображение достаточно маленькое (<128k в большинстве браузеров, меньше в IE), вы можете использовать его, используя схему Data URI. </p>

http://en.wikipedia.org/wiki/Data_URI_scheme

В основном кодировка Base64 данных вашего изображения с небольшим количеством информации, чтобы сообщить браузеру, что делать с данными.

...