我已经阅读了关于这个主题的其他问题,但实际上没有回答我的问题.
我让用户在向网站提交某个项目时上传图片.每个用户都可以提交多个项目,每个项目都有一个图片.
问题是,我不想用原始文件名保存图片.我想用项目的ID保存它.因此,如果用户提交了一个Banana项目,该项目的ID为5,文件名为
banana.jpg
Run Code Online (Sandbox Code Playgroud)
我希望它保存为
site_media/items/5.jpg
Run Code Online (Sandbox Code Playgroud)
并不是
site_media/items/banana.jpg
Run Code Online (Sandbox Code Playgroud)
这是Django自动执行的操作.
现在的问题是,当我从表单中获取POST多部分数据时,我已将图片保存为site_media/items/item_ID.jpg.但是,当我尝试在模板上显示字段item.picture时,它会尝试访问
site_media/items/banana.jpg
Run Code Online (Sandbox Code Playgroud)
代替
site_media/items/5.jpg
Run Code Online (Sandbox Code Playgroud)
哪个是实际存在的文件.所以我得到了一个破碎的链接.
我试图更改picture.path属性,希望它只是Django在链接图像时读取的字符串,但Django给了我一个例外,这让我觉得它可能是别的东西.
此外,当然,我更喜欢有一个解决方案,我只是在保存时更改文件名,而不是使用原始文件名删除文件并保存带有新名称的副本,以达到良好的实践和效率目的.
有谁可以帮我这个?谢谢.
型号代码:
class Item(...):
...
picture = models.ImageField(
upload_to="site_media/items/",
max_length=512,
null=True,
default=''
)
Run Code Online (Sandbox Code Playgroud)
这是处理POST表单的函数:
item = Item.objects.create(... data from form)
try:
picture = FILES['picture']
print str(picture)
destination = open('site_media/items/'+str(item.id)+".png", 'wb+')
for chunk in picture.chunks():
destination.write(chunk)
destination.close()
item.picture = picture
except Exception:
messages.error(request, "Picture for item not loaded successfully")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7342 次 |
| 最近记录: |