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

时间:2016-07-16 18:36:02

标签: python django web pycharm

我是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。

4 个答案:

答案 0 :(得分:0)

好的,首先,如果你能够指定确切的部分,或者错误,那么你会感觉很棒。

其次,如果您的唯一目的是显示图片,具体取决于某些条件,并且永远不会,您的网络应用用户将会上传任何图片,即没有 表单 ,其中用户正在上传Facebook上传等图片,从技术上讲,您 don& #39;确实需要模型中的ImageField。

您只需将图片名称存储在 CharField 中,然后在 视图 中编写一个功能即可为 模板 中的 模板 创建相同的URL,以便从 static / img 目录中读取图像,因为您已经指定了静态的。

此外,Django官方文档说你需要拥有&#34; Pillow&#34;安装使用ImageField()。 https://docs.djangoproject.com/en/1.9/ref/forms/fields/#imagefield

同样,指定错误或您遇到的部分将有助于解决您的问题

答案 1 :(得分:0)

{% 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 %}

由于您没有使用{% static "" %},因此您需要在图片的网址前添加/

答案 2 :(得分:0)

我唯一缺少的是MEDIA_URL和MEDIA_ROOT。 将这些改为: -

from django.conf.urls.static import static

urlpatterns = [
...................
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

并更新了url.py文件: -

p = multiprocessing.Process(target=mp_worker(raster))

参考: - Images from ImageField in Django don't load in template

答案 3 :(得分:0)

选项-1:无需在post.img_breif之后输入.url。

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

如果仍然无法使用以下代码:

<强> models.py

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 image_thumbnail(self):
        return '<div class="panel-heading post-heading1"><img src="%s"/></div>' % (self.img_brief)
    image_thumbnail.allow_tags = True
    image_thumbnail.short_description = 'Image Breif'

def __str__(self):
    return self.title

<强>模板

 {% for post in posts %}
    <div class="panel panel-lg panel-custom">
      {{ post.image_thumbnail }}              
      ....
</div>
{% endfor %}