передача параметра BLOB в Django - PullRequest
0 голосов
/ 31 декабря 2010

Я храню свои изображения в БД в виде больших двоичных объектов:

class MyClass(db.Model):
    icon=db.BlobProperty()

Теперь я хочу отправить BLOB-объект в мой HTML-код следующим образом: Допустим, у меня есть myClass в качестве экземпляра MyClass

result = """<div img_attr=%s> Bla Bla </div>""" % (myClass.icon)

Некоторые, как это не работает. У тебя есть идеи?

Ответы [ 3 ]

1 голос
/ 31 декабря 2010

Вы не можете просто сбросить необработанные данные изображения на свою HTML-страницу.Вам нужно сделать это в двух частях:

В вашем html вам нужно обратиться к файлу изображения:

result = "<div>"
         "<img src='{0}' />"
         "</div>"
         .format(MYSITE + MYIMAGEDIR + myClass.name)

Ваш браузер читает страницу htmlобнаруживает, что вы хотите включить изображение, и ищет файл изображения для включения - поэтому он запрашивает у вашего сайта что-то вроде http://www.myexample.com/images/icon01.jpg

Теперь отдельно вы отвечаете на этот второй запрос с содержанием изображения, как показывал @anand.

0 голосов
/ 31 декабря 2010

Значение, хранящееся в хранилище данных и возвращаемое appengine с db.BlobProperty, является не фактическими байтами большого двоичного объекта, а скорее BlobKey, который используется для ссылки на него. Есть два способа использовать этот ключ. Вы можете создать BlobReader для загрузки байтов большого двоичного объекта из BlobStore в ваше приложение или создать ответ с помощью ServeHandler.send_blob для передачи этих байтов клиенту.

Выполнение второго в Django - небольшая головная боль, потому что ServeHandler не очень хорошо вписывается в стек обработки запросов Django. Вот точка зрения, которая сделает это за вас без особых проблем:

def get_image_data(request, key, filename):
  "serve original uploaded image"

  # verify the users' ability to get the requested image
  key = urllib.unquote(key)
  img = _load_metadata(request, key)
  blob = img.data;
  blobkey = blob.key()

  # and tell google to serve it
  response = http.HttpResponse(
      content='',
      content_type=blob.content_type)
  response['X-AppEngine-BlobKey'] = str(blobkey)
  return response
0 голосов
/ 31 декабря 2010

Ваш код говорит о том, что вы работаете на движке приложений Google с Django.

Вам просто нужно запросить изображение в вашем представлении и вернуть его как HTTP-ответ.

image = myclassObject.icon

response = HttpResponse (изображение)

response ['Content-Type'] = 'image / jpg'

ответный ответ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...