为什么makedirs()创建的是空文件而不是文件夹?

时间:2019-10-02 14:36:44

标签: python django

我正在创建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

1 个答案:

答案 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()即使成功,也将完全在其他位置创建该目录。