如何在HTML中仅循环指定类型文件(如video/mp4)?
如何在Flask中仅循环加载MP4视频文件
没问题,你只需要在后端对遍历到的文件做个筛选,只保留.mp4后缀的文件就行,另外还要注意子文件夹里的文件路径问题(你的当前代码会丢失子目录结构,导致子文件夹里的视频加载失败),我帮你把代码调整一下:
修改后的后端代码
from flask import Flask, render_template import os app = Flask(__name__, static_folder='static') path = 'static' @app.route('/') def index(): video_files = [] # r=root(当前遍历的目录), d=directories(当前目录下的子文件夹), f = files(当前目录下的文件) for r, d, f in os.walk(path): for file in f: # 只筛选.mp4后缀的文件,兼容大写后缀的情况 if file.lower().endswith('.mp4'): # 生成相对于static文件夹的相对路径,确保子文件夹内的文件能正确加载 relative_path = os.path.relpath(os.path.join(r, file), path) video_files.append(relative_path) return render_template('index.html', video_files=video_files) if __name__ == '__main__': app.run(host='localhost', debug=True, threaded=True)
关键修改点说明
- 文件类型筛选:通过
file.lower().endswith('.mp4')判断文件后缀,用lower()是为了兼容.MP4这种大写后缀的情况,避免漏选目标文件。 - 路径问题修正:原来的代码只把文件名
file加入列表,会丢失子目录结构(比如static/videos/xxx.mp4会被存成xxx.mp4),导致前端找不到文件。现在用os.path.join(r, file)获取文件的完整路径,再通过os.path.relpath生成相对于static文件夹的相对路径,这样url_for就能正确生成静态文件的访问URL了。
前端代码保持不变(可选优化)
你的前端代码可以继续使用,要是想更严谨,可以加上浏览器不支持播放的提示,但因为后端已经做了筛选,这一步不是必须的:
{% for file in video_files %} <video controls width="250" height="250"> <source src="{{ url_for('static', filename=file) }}" type="video/mp4"> 你的浏览器不支持视频播放 </video> {% endfor %}
这样修改后,页面就只会加载所有子目录下的MP4视频文件,不会再加载其他类型的文件啦。
内容的提问来源于stack exchange,提问作者sgsg
相关产品推荐
相关产品推荐

