Как отобразить вложение изображения couchdb в шаблоне Django - PullRequest
1 голос
/ 09 мая 2011

Я использую couchdb-python с Django.Я ищу способ отображения изображения (которое хранится в базе данных как приложение к документу) в шаблоне.Как ни странно, я не могу найти в Интернете ни одного примера, как это сделать.

В настоящее время в views.py у меня есть что-то вроде этого:

def displaypage(request,id):
    docs = SERVER['docs']
    try:
        doc = docs[id]
    except ResourceNotFound:
        raise Http404
    ...
    attachments = doc['_attachments']['someimage.jpg']
    ...
    text_marked_down = markdown.markdown(doc['text'])
    return render_to_response('couch_docs/display.html',{'row':doc,'attachments':attachments,'doctext':text_marked_down,...},context_instance=RequestContext(request))

Затем в шаблоне display.html:

{% extends 'site_base.html' %}

{% block wrapper %}
{{ attachments }}
<div>{{ doctext|safe }}</div>
{{ endblock }}

Я вижу текст очень хорошо, но для изображения я вижу только следующее: {u'stub ': True, u'length': 27018, u’vpos ': 19,u'content_type ': u'image / jpeg'}

Итак, я явно не передаю фактическое изображение или неправильно отображаю его.Как ни странно, я нигде не могу найти в Интернете пример того, как на самом деле это сделать.Кто-нибудь может указать мне один или предоставить здесь?

Ответы [ 2 ]

2 голосов
/ 09 мая 2011

Вы используете шаблонизатор для рендеринга HTML-документа. Этот документ будет интерпретироваться веб-браузером, как и любой другой документ HTML.

Подумайте о том, как HTML-страница содержит изображение. Изображение никогда не встроено в сам HTML-документ. HTML-страница содержит ссылку для указания браузеру отдельно загружать изображение и отображать его на месте.

<img src="/path/to/image" />

Итак, вам также необходимо:

  • создать отдельное представление, которое будет возвращать только двоичные данные изображения. Установите тип пантомимы соответственно. См. http://effbot.org/zone/django-pil.htm, где приведены некоторые идеи о том, как вернуть изображение, но в вашем случае установите в качестве ответа содержимое вашего изображения.
  • добавьте тег image в ваш шаблон, который вызывает новый созданный вами вид.
0 голосов
/ 10 мая 2016

после того, как вы детализируете свою базу данных, вы можете рассмотреть возможность создания URL каждого вложения документов следующим образом:

def function():

    couch = couchdb.Server()    #connect to server
    db = couch['img']         #connect to database which contains docs with img attachments
    doc_id = []                #create list of id's
    http_docid = []            #create list to populate href for picture path

    for i in db:                #for each id in the db
        doc_id.append(i)       #add to the carid list
        doc = db[i]             #get the document id
        for key in (doc['_attachments']):   #for the key in the doc '_attacments' payload
            print key #just to confirm
        href_docid.append(('http://yourdbDomain/dbname/'+i+'/'+key))  #create a uri and append to a list
    return href_docid     

И ниже я использую шаблонизацию Jinja2:

     {% for img in function() %}

      <img class="some-class" src="{{ img }}">

     {% endfor %}

Надеюсь, это окажется полезным!

...