2013-02-08 70 views

回答

-1

在Django中我该如何做到这一点并不明显,但这是我最终做的。

我在views.py中创建了一个show_image函数,它传递感兴趣图像的md5并将其作为HttpResponse返回。在这种情况下,发布数据会被用户过滤,但一般情况下您可能不需要。此外,我的show_image代码效率很低,我相当肯定有办法使用mongoengine进行查询,这比通过查找md5的图像迭代效率更高。 urls.py传递图像的md5,然后调用show_image并返回标记的HttpResponse/url需求。

models.py

from mongoengine import * 

class Post(Document): 
    image = ImageField() 

views.py

@login_required 
def view_posts(request): 
    post_data = Post.objects(user=request.user) 

    return render(request, 'posts.html', { 'post_data' : post_data }) 

@login_required 
def show_image(request, _md5): 
    post_data = Post.objects(user=request.user) 

    image = None 
    for post in post_data: 
     if _md5 == post.image.md5: 
      image = post.image.read() 
      break 

    return HttpResponse(image, content_type="image/" + post.image.format) 

urls.py

url(r'posts/images/(?P<_md5>\w+)$', 'project.views.show_image', name='show_image'), 

个模板/ posts.html

<div id="posts"> 
    {% for post in post_data %} 
    <dl class="dl-horizontal"> 
     <dd>{{ post.image.uploadDate }}</dd> 
     <img src="images/{{ post.image.md5 }}" /> 
    </dl> 
    {% endfor %} 
</div> 
+0

注意:这可能是修改为使用对象ID而不是可能使这更通用的md5。 – 2013-07-18 01:34:22

0

@login_required DEF view_posts(请求): post_data = Post.objects(用户= request.user)

return render(request, 'posts.html', { 'post_data' : post_data }) 

@login_required DEF show_image(请求,_md5): post_data = Post.objects(user = request.user)

image = None 
for post in post_data: 
    if _md5 == post.image.md5: 
     image = post.image.read() 
     break 

return HttpResponse(image.read(), content_type="image/" + post.image.format) 
相关问题