python烧瓶浏览文件目录

时间:2014-05-18 03:19:00

标签: python flask

是否可以使用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)

2 个答案:

答案 0 :(得分:11)

网址结构中的path转换器(docs链接)比硬编码所有不同的可能路径结构要好。

os.path.exists可用于检查路径是否有效,os.path.isfileos.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>

注意:abortsend_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()

这是一个工作仓库