提问者:小点点

Django:从数据库中提取图像并在模板中显示


我是姜戈的初学者,对一件事很着迷,我不知道该怎么做。我想显示一个存储在数据库中的图像到我的模板。图像上载到文件夹“static/img”。

这是我的数据库:

class Post(models.Model):
author = models.ForeignKey('auth.User')
title = models.CharField(max_length=300)
content_brief = models.TextField()
content_major = models.TextField()
img_brief = models.ImageField(upload_to='static/img')
image_major = models.ImageField()
created_date = models.DateTimeField(default=timezone.now)
publish_date = models.DateTimeField(blank=True, null=True)


def publish(self):
    self.publish_date = timezone.now()
    self.save()


def __str__(self):
    return self.title

这是我的模板:

{% for post in posts %}
<div class="panel panel-lg panel-custom">
                    <div class="panel-heading post-heading1">
                        <img src="{{ post.img_brief.url }}">
                    </div>
....
</div>
{% endfor %}

我的views.py:

def home_page(request):
    posts =   Post.objects.filter(publish_date__lte=timezone.now()).order_by('publish_date').reverse()
    return render(request, 'home.html', {'posts': posts})

使用TEMPLATE_DIRS、STATIC_ROOT和static_url更新settings.py。


共1个答案

匿名用户

好吧,首先,如果你能指定你所困的准确的部分或错误,那就太好了。

其次,如果您的唯一目的是根据某种条件显示图像,而您的Web应用程序用户永远不会上传任何图像,也就是用户上传图像时没有像Facebook上传那样的表单,那么从技术上来说,您的模型中并不真正需要ImageField。

您可以简单地将图像名存储在CharField中,然后在视图中编写一个函数,为其构建一个URL,该URL可以在模板中使用,以便从静态/img目录读取图像,因为您已经指定了静态。

此外,Django的官方文档说,您需要安装“pillow”才能使用ImageField()。https://docs.djangoproject.com/en/1.9/ref/forms/fields/#ImageField

同样,指定错误或您被卡住的部分将对解决问题有很大帮助