如何在Django模板中设置图像路径

时间:2019-05-30 11:30:58

标签: django django-templates

我正在尝试在模板中显示已经存储的数据库图像。但是在这里,我仅获得图像的名称。如何解决这个问题,我在哪里做错了。

models.py

class Images(models.Model):
    image = models.ImageField(upload_to='images', blank=True, null=True)

settings.py

STATIC_URL = '/static/'

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

MEDIA_URL = '/media/'

urls.py

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

views.py

def display(request):
     myimages_objs = Images.objects.all().values()
     for i in myimages_objs :
          myimages_objs = i['image']
          return render(request, 'index.html', {'myimages_obj ': myimages_objs })

index.html

<div class="divi">
   <img src="{{ myimages_obj }}" alt="image">
</div>

1 个答案:

答案 0 :(得分:0)

我不明白为什么要在for循环中返回对象,这导致模板中仅显示单个图像。您可以通过传递模板中的所有图像对象,然后遍历模板中的对象以显示图像,来代替执行此操作。

您可以将视图更改为:

def display(request):
    myimages_objs = Images.objects.all() # get all the images
    return render(request, 'index.html', {'myimages_objs':myimages_objs})

然后在您的模板中:

<div class="divi">
    {% for item in myimages_objs %} //loop through all the images
        <img src="{{ item.image.url }}" alt="image">
    {% endfor %}
</div>

编辑:

upload_to 更改为 upload_to =“ images /”

就我而言,您的图像未存储在images文件夹中,因为您错过了反斜杠(代表文件夹名称)。因此,图像被保存在media文件夹中。

但是图像URL类似于project_path/media/images/something.jpg,由于图像未保存在images文件夹中而无法找到。

按照说明更改字段,以将新图像存储在指定的文件夹中。对于旧图像,请手动将其复制到图像文件夹。

我希望这会有所帮助。