我正在创建Django应用,并使用Python创建上传文件夹。目前,我正在使用静态名称进行测试。我的函数仅创建一个空文件,而不创建一个文件夹。
我尝试过mkdir()
和makedirs()
都得到相同的结果。我正在Windows 10上进行测试。
这是我的模型:
def uploadloc(self, irun):
if not os.path.exists('device1'):
os.makedirs('device1')
return 'device1'
iimage = models.ImageField(null=True, default=None, upload_to=uploadloc)
我认为这应该创建一个文件夹,但是它只是创建一个空文件。当前未使用irun
。
答案 0 :(得分:1)
针对ImageField
的Django documentation说,它从FileField
继承了自变量,其中upload_to
自变量的语义为detailed:
FileField.upload_to
此属性提供了一种设置 上传目录和文件名,并且可以通过两种方式设置。同时 情况下,该值将传递给
Storage.save()
方法。如果您指定一个字符串值,则它可能包含
strftime()
格式, 将由文件上传的日期/时间替换(这样 上传的文件未填满给定目录)。例如:class MyModel(models.Model): # file will be uploaded to MEDIA_ROOT/uploads upload = models.FileField(upload_to='uploads/') # or... # file will be saved to MEDIA_ROOT/uploads/2015/01/30 upload = models.FileField(upload_to='uploads/%Y/%m/%d/')
如果您使用默认的
FileSystemStorage
,则字符串值为 附加到您的MEDIA_ROOT
路径上以形成本地位置 将存储上传文件的文件系统。如果您使用的是 不同的存储,请查看该存储的文档以了解其存储方式 处理upload_to
。
upload_to
也可以是可调用的,例如函数。这将成为;这将是 调用以获取上载路径,包括文件名。这个 callable必须接受两个参数并返回Unix样式的路径(带有 正斜杠)传递给存储系统。
您的可调用函数接受了错误数量的参数(self
不计算在内),并且由于其返回值旨在包含文件名,因此可以。当它将'default1'
返回到ImageField()
时,这就是使用upload_to
可调用对象提供的名称创建空文件的原因。
os.makedirs()
即使成功,也将完全在其他位置创建该目录。