我正在使用os.walk()从目录中获取文件的路径。当我在utils.py中使用它时,我的代码可以正常工作,但是当我将其放在route.py中的index()函数中时,当尝试从列表中获取名称时,我得到了IndexError:list index超出范围。 >
utils.py
menu_image_list = []
for root, dirs, files in os.walk('static/img/menu/'):
for filename in files:
x = os.path.join(root, filename)
menu_image_list.append(x)
print(menu_image_list[0])
输出:static / img / menu / image_1.jpg
routes.py
@app.route("/", methods=['GET', 'POST'])
def index():
# Handling Twitter
# Handling image file names
menu_image_list = []
for root, dirs, files in os.walk('static/img/menu/'):
for filename in files:
x = os.path.join(root, filename)
menu_image_list.append(x)
menu_image1 = menu_image_list[0]
menu_image2 = menu_image_list[1]
menu_image3 = menu_image_list[2]
menu_image4 = menu_image_list[3]
# Handling email contact form
return render_template('index.html', image1=menu_image1, image2=menu_image2, image3=menu_image3, image4=menu_image4)
我已删除了route.py中不相关的代码,但保留了注释以解释为什么我使用['GET','POST']
所以我认为这是flask的问题...我也试图将这段代码转换为一个类,并将其从utils.py导入为一个类,但这没有用。我也尝试过仅从flask导入列表,这也没有用。他们每个人都犯了相同的错误。
答案 0 :(得分:0)
好的,因此导致此问题的原因有很多。
我的项目布局不正确。如果您遇到此问题,请检查以下两个链接: http://flask.pocoo.org/docs/1.0/tutorial/layout/ https://www.youtube.com/watch?v=44PvX0Yv368
我使os.walk()的路径从先前编写的内容的父目录开始
2.5如果您尝试os.path.join尝试在os.walk()中使用的路径和文件名(os.walk()的结果)时尝试将这些路径添加到html,则可能会导致问题,因为是比您需要的html目录更高的目录(对不起,如果这对您造成困扰,对我来说也是如此)。出于某种原因,os.walk()希望查看的目录比html多,因此,与其重复使用os.walk(path)的路径,不如这样做:
menu_image_list = []
for root, dirs, files in os.walk('siamsite/static/img/menu/'):
for filename in files:
x = os.path.join('static/img/menu/', filename)
menu_image_list.append(x)
return render_template('index.html',
image1=menu_image_list[0], image2=menu_image_list[1],
image3=menu_image_list[2], image4=menu_image_list[3])
希望这对某人有帮助,如果您需要进一步的详细说明,请告诉我!