我缺少一些元素来显示用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.
总的来说,我缺乏(并且仍然有:))关于上传和显示静态文件的基本知识。
谢谢。
答案 0 :(得分:2)
当要为表Post创建新记录时,则必须上载图像文件,因此,如果设置了媒体URL,则它将存储在指定位置。
尝试在settings.py文件中设置MEDIA_ROOT
和MEDIA_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 }}"/>