Django,浏览器显示文件名而不是图片

时间:2019-05-29 11:10:07

标签: django django-templates

我缺少一些元素来显示用Django创建的博客上每条帖子附带的图片,而不是图片文件名。

许多解决此类问题的方法是:

<img src="{{Object.picture.url}}"/>

在模板上,我尝试过:

1

<img src="{{ posts.title_picture.url }}"/>

2

<img src="{{title_picture.url}}"/>

分别在浏览器上显示这些内容的结果:

1。

pictureforpost1.png

2。

img

型号:

class Post(models.Model):
    title = models.CharField(max_length=255, blank=True, null=True)
    title_picture = models.FileField(blank=True,null=True)

视图:

class IndexView(ListView):
    model = Post
    context_object_name = 'posts'

似乎Django正在查找文件。只是不显示图片而已。

****解决方案要归功于以下答案:****

已更改

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

to 

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

并添加了以下

urls.py

urlpatterns = [
   ...
]
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 
# when served with STATIC_URL and STATIC_ROOT instead it 
# is not working so check difference in MEDIA and STATIC.

总的来说,我缺乏(并且仍然有:))关于上传和显示静态文件的基本知识。

谢谢。

4 个答案:

答案 0 :(得分:2)

当要为表Post创建新记录时,则必须上载图像文件,因此,如果设置了媒体URL,则它将存储在指定位置。 尝试在settings.py文件中设置MEDIA_ROOTMEDIA_URL,例如。

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

您可以在django documentation中看到详细信息。

答案 1 :(得分:0)

settings.py:

'context_processors': [
                ...
                'django.template.context_processors.media',
                ...
            ],

模板:

<img src="{{ MEDIA_URL }}{{title_picture.url}}"/>

答案 2 :(得分:0)

您必须使用models.ImageField()而不是models.FileField()。 并且必须使用pip安装“枕头”软件包。

答案 3 :(得分:0)

从代码的外观来看,您试图从一组Post中获取图像,而不只是一个帖子。

尝试仅显示其中一篇文章,如果以下语法不起作用,则可以使用for循环遍历集合。

<img src="{{ posts.first.title_picture.url }}"/>