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

时间:2018-07-26 06:20:17

标签: django python-3.x

我具有以下功能,可在给定目录列表中提供文件列表(完整路径):

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 个答案:

答案 0 :(得分:1)

这不是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

上找到相同的问题

答案 1 :(得分:0)

尝试使用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