在HTML Flask中显示ImageField

时间:2015-10-28 17:09:37

标签: python flask mongoengine imagefield

我在从数据库中获取图片并在我的网页上显示时遇到了一些问题。

首先,我使用的是mongoengine,所以这里(部分)是models.py

class Picture(EmbeddedDocument):
    image = ImageField()

class Post(Document):
    ...
    comments = ListField(EmbeddedDocumentField('Comment'))
    user = ReferenceField('User', reverse_delete_rule='CASCADE')
    images = ListField(EmbeddedDocumentField('Picture'))

以下是我保存图片的view中的代码:

picture = Picture()

with tempfile.TemporaryFile() as f:
    f.write(file.read())
    f.flush()
    f.seek(0)
    picture.image.put(f)

picture.save()

post.images.append(picture)

post.save()

因此,在HTML页面中,我有以下内容:

<p>{{ post.images[0].image }}</p>
<img src="{{ post.images[0].image }}">

第一行输出:<ImageGridFsProxy: None>。显然,第二个没有输出有效的图像。

以下是我在mongo shell中db.post.find(...)时得到的内容:

{ "_id" : ObjectId("56325c4e66b3f6bf8beb9e03"), ... "images" : [ { "image" : ObjectId("56325c4e66b3f6bf8beb9e04") } ] }

有人可以帮我吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我相信你应该这样做:

class Picture(EmbeddedDocument):
    image = ImageField()

class Post(Document):
    ...
    comments = ListField(EmbeddedDocumentField('Comment'))
    user = ReferenceField('User', reverse_delete_rule='CASCADE')
    images = ListField(EmbeddedDocumentField('Picture'))

要存储图片,请将图片附加到post.images集合并致电post.save()