如何在媒体下搜索文件夹名称 - 或创建一个 - django

时间:2013-08-30 18:49:07

标签: python django

我陷入了这一步:

我有一个上传功能,可以将文件保存在upload文件夹下的media文件夹下。这些文件将保存在文件夹中,这些文件夹同时也是由上传文件的用户名创建的。这些带文件的文件夹将在upload文件夹

下的media文件夹下创建
def custom_path(instance, filename):
return '/'.join(['upload',instance.student.user.username,filename])

class Doc(models.Model):
    uploadtime = models.DateTimeField(auto_now_add=True, blank=True)
    datei = models.FileField(upload_to=custom_path,default='')

现在我想做的是:

1)搜索特定的文件夹名称 2)如果找到,请查看 - 如果没有找到,请创建一个。

如何获取给定文件夹下的所有文件夹名称?或者我如何循环文件夹并获取他们的名字?

如果我这样做:os.path.abspath(os.path.join(os.path.dirname( __file__ ), os.pardir, 'media/upload'))我正在获取upload文件夹的路径。我有点困惑,不知道如何在此路径下搜索文件夹名称

任何声明都将不胜感激

2 个答案:

答案 0 :(得分:2)

def custom_path(instance, filename):
    path = os.path.join('upload', 'media', slugify(instance.student.user.username))
    try:
        os.path.mkdir(path)
    except OSError:
        # path already exists
        pass

如果用户名包含一些不允许作为文件名的特殊字符,请使用slugify

如果目录已存在,

os.path.mkdir将引发OSError

最后,os.path.join正确创建路径,而您不需要文件名组件,因为您要返回目录路径。

答案 1 :(得分:1)

您可能需要记住的一件事是,在 media / upload 下拥有大量子目录最终会非常非常慢地访问该目录。根据我的经验,访问时间开始恶化,目录下有大约1000个目录/文件。

如果您预计会出现这种情况,您可能需要修改您的设计,以便将用户的文件存储在数据库中。