我具有以下功能,可在给定目录列表中提供文件列表(完整路径):
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()执行了某些缓存还是需要我们在添加/删除一些文件后重新启动服务器?
答案 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