代码之家  ›  专栏  ›  技术社区  ›  deltaforce

Django无法识别删除/添加的文件

  •  0
  • deltaforce  · 技术社区  · 6 年前

    我具有以下函数,它为我提供给定目录列表中的文件列表(完整路径):

    from os import walk
    from os.path import join
    
    # Returns a list of all the files in the list of directories passed
    def get_files(directories = get_template_directories()):
        files = []
        for directory in directories:
            for dir, dirnames, filenames in walk(directory):
                for filename in filenames:
                    file_name = join(dir, filename)
                    files.append(file_name)
        return files
    

    我正在Django的模板目录中添加一些文件。但此函数始终返回相同的文件列表,即使在运行时添加/删除了一些文件。只有当我重新启动服务器时,这些更改才会反映出来。这是因为os.walk()执行了某些缓存,还是需要在添加/删除某些文件后重新启动服务器?

    2 回复  |  直到 6 年前
        1
  •  1
  •   deltaforce    6 年前

    这不是Django问题,你的行为是 python 解释程序特定:

    默认参数可以作为普通值提供,也可以作为函数调用的结果提供,但是后一种技术需要非常大的警告。默认值在启动应用程序时计算一次,而不是其他值。

    我相信此代码可以解决您的问题:

    def get_files(directories = None):
        if not directories:
            directories = get_template_directories()
        files = []
        for directory in directories:
            for dir, dirnames, filenames in walk(directory):
                for filename in filenames:
                    file_name = join(dir, filename)
                    files.append(file_name)
        return files
    

    您可以在stackoverflow上找到相同的问题 Default Values for function parameters in Python

        2
  •  0
  •   JPG    6 年前

    尝试使用 os.listdir() 而不是 os.walk

    import os
    
    
    def get_files(directories=get_template_directories()):
        files = []
        for dir in directories:
            files += [os.path.join(dir, file) for file in os.listdir(dir) if os.path.isfile(file)]
        return files