1

我需要在我的 django + mongoengine 项目中提供来自 GridFS 的文件。有没有开箱即用的解决方案?

4

2 回答 2

0

@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.read(), content_type="image/" + post.image.format)
于 2015-03-06T03:58:49.177 回答
-1

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

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

模型.py

from mongoengine import *

class Post(Document):
    image = ImageField()

视图.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)

网址.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>
于 2013-07-16T03:26:32.337 回答