是否可以使用flask来浏览带有文件的目录?
我的代码似乎永远不会正常工作,因为字符串之间会发生奇怪的附加。
此外,我不知道如何实现一种检查路径是文件还是文件夹。
这是我的Flask app.route:
@app.route('/files', defaults={'folder': None,'sub_folder': None}, methods=['GET'])
@app.route('/files/<folder>', defaults={'sub_folder': None}, methods=['GET'])
@app.route('/files/<folder>/<sub_folder>', methods=['GET'])
def files(folder,sub_folder):
basedir = 'files/'
directory = ''
if folder != None:
directory = directory + '/' + folder
if sub_folder != None:
directory = directory + '/' + sub_folder
files = os.listdir(basedir + directory)
return render_template('files.html',files=files,directory=basedir + directory,currdir=directory)
这是我的html模板,如果有人能给我一些指示,我将不胜感激!
<body>
<h2>Files {{ currdir }}</h2> </br>
{% for name in files: %}
<A HREF="{{ directory }}{{ name }}">{{ name }}</A> </br></br>
{% endfor %}
</body>s.html',files=files,directory=basedir + directory,currdir=directory)
答案 0 :(得分:11)
网址结构中的path
转换器(docs链接)比硬编码所有不同的可能路径结构要好。
os.path.exists
可用于检查路径是否有效,os.path.isfile
和os.path.isdir
可用于检查路径是分别是文件还是目录。
端点:
@app.route('/', defaults={'req_path': ''})
@app.route('/<path:req_path>')
def dir_listing(req_path):
BASE_DIR = '/Users/vivek/Desktop'
# Joining the base and the requested path
abs_path = os.path.join(BASE_DIR, req_path)
# Return 404 if path doesn't exist
if not os.path.exists(abs_path):
return abort(404)
# Check if path is a file and serve
if os.path.isfile(abs_path):
return send_file(abs_path)
# Show directory contents
files = os.listdir(abs_path)
return render_template('files.html', files=files)
模板:
<ul>
{% for file in files %}
<li><a href="{{ file }}">{{ file }}</a></li>
{% endfor %}
</ul>
注意:abort
和send_file
函数是从flask中导入的。
答案 1 :(得分:0)
这是一个可行的示例。
# app.py
from flask import Flask
from flask_autoindex import AutoIndex
app = Flask(__name__)
ppath = "/" # update your own parent directory here
app = Flask(__name__)
AutoIndex(app, browse_root=ppath)
if __name__ == "__main__":
app.run()
这是一个工作仓库