python - DJANGO - 将本地存储的图像上传到模型 ImageField 属性
问题描述
我将图像下载到文件夹的子根目录images
中,我media
正在尝试生成包含images
文件夹内照片的新模型。这就是我的模型和视图的样子:
class Post(models.Model):
...
image = models.ImageField(upload_to="images", blank=True, null=True)
def generate_posts(request):
for i in range(20):
title_ = f'title{i}'
body_ = f'text for post number : {i}'
author_ = f'author{i}'
network_ = randomize_social()
post = Post(title=title_, body=body_, author=author_, social_network=network_)
if randomize_picture():
post.image.save("logo.png", File("images/svante.jpg"), save=True)
else:
post.image = None
post.save()
areGenerated = True
return render(request, "posts/generate_posts.html", {'areGenerated':areGenerated})
该logo.png
文件是在images
文件夹内创建的,但它是空白的,大小为 0kb,当我按照/generateposts
url 操作时,我收到以下错误消息:
AttributeError at /generateposts
'str' object has no attribute 'read'
我能做些什么来解决这个问题?
解决方案
您是否对设置文件进行了更改?您需要进行更改,例如 MEDIA_ROOT = os.path.join(BASE_DIR, 'media') MEDIA_URL = '/media/' 并且不要忘记将这些添加到您的网址中:
from . import views, settings
from django.contrib.staticfiles.urls import static
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
推荐阅读
- r - 将文本中包含的半年格式化为日期
- gitversion - GitVersion Mainline - 每次推送的版本增量
- openvswitch - 为什么在wireshark的“任何”接口上捕获数据包时,每个icmp请求都会转换为vxlan隧道中的四个数据包?
- python - 没有名为 livelossplot 的模块
- excel - 如何使用 google doc / excel 电子表格来计算自定义定价?
- batch-file - 回声关闭(批处理脚本)
- python - Python 初学者 - 在预定义的时间间隔内对值求和
- php - 如何从控制器打印传递数组以查看并在视图中打印
- queue - Hazelcast 队列上的 TTL
- c# - 如何在 C# 中使用基本身份验证发出 PUT 请求