这个问题让我困惑了好几个小时了。我正在设计一个 更新个人资料页面,如果用户愿意,用户可以更新照片。
问题在于,当我将图像输入字段留空并编辑其他字段并点击提交时,没有任何更改,我被踢出会话,另一方面,当我选择要上传的图像并点击提交时,一切都是更新和功能运行我设计它。
以下是相关代码:
class User(models.Model):
photo = models.CharField(max_length=100, null=False, blank=True)
这是一个Charfield'因为我只存储对数据库中图像的引用。
HTML:
<input type="file" name='photo' class="form-control">
查看:
if request.method == 'POST':
photo = request.FILES['photo']
if photo:
fs = FileSystemStorage()
filename = fs.save(photo.name, photo)
uploaded_file_url = fs.url(filename)
if uploaded_file_url[-4:] not in ALLOWED_EXTENSIONS:
error = 'Invalid File Type'
errors.append(error)
print(uploaded_file_url)
您可以忽略print语句。我在这个函数中传播了一堆,所以我可以看到函数在每个阶段的工作原理。由于这个原因,我能够确定当文件输入字段留空时,不再处理其他代码并退出程序。但显然该领域是可选的。我也检查了缩进。让我的头脑。
有什么想法吗?
答案 0 :(得分:0)
事实证明,我没有初始化uploaded_file_url
变量而打破了函数执行。我尝试将request.FILES['photo']
更改为request.FILES.get('photo')
,但行为略有不同,但行为上的差异根本不明显。当我使用.get('photo')
时,为了缩短这一点,它在浏览器中引发了一个错误,这一直暗示着我的错误。初始化变量是我必须做的全部。
我观察到的主要区别是request.FILES['xxx']
如果对代码有些不满意就不会引发错误,它会在没有单词的情况下退出,而request.get('xxx')
会引发错误。