如何正确配置路由以仅显示子目录?

时间:2019-07-01 22:36:15

标签: flask

我无法从子目录下载csv,但可以从主目录下载。

我尝试将路由更改为子目录,但会引发404错误。

@app.route('/', defaults={'req_path': 'Categorized%20Output/2019-06-27'})
@app.route('/<path:req_path>')
def index(req_path):
    # data = dataset.html
    #return dataset.html
    folderLocation = os.path.dirname(__file__)
    print(folderLocation)
    abs_path = os.path.join(folderLocation,req_path)
    print(abs_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('index.html',files = files)

if __name__ == "__main__":
    app.run()

我的CSV文件位于Folder位置/分类输出/日期文件夹的许多子文件夹中,这些子文件夹被命名为不同的日期 /

模板中的index.html文件

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <link rel=stylesheet type=text/css href="{{ url_for('static', filename='css/style.css') }}"/>
  <title>Show CSV</title>
</head>
<body>
  <div class="table">
    <ul>
    {% for file in files %}
    <li><a href="{{ file }}">{{ file }}</a></li>
    {% endfor %}
</ul>
  </div>
</body>

我希望能够从所有不同的日期子文件夹下载CSV。 CSV位置的示例是:“ 127.0.0.1:5000/Categorized%20Output/2019-06-27”

1 个答案:

答案 0 :(得分:-1)

最近我找到了一种使用easygui来抓取文件/目录的便捷方法。

pip install easygui
import easygui

@app.route('/')
def index():
    get_a_file = easygui.fileopenbox()
    files = get_a_file # do some stuff with your file
    return render_template('index.html', files=files)

此答案不能解决问题的根源,但如果有帮助,并且您有兴趣,可以阅读easygui documentation

如果要从特定目录开始,则可以自定义fileopenbox,例如。.

files = easygui.fileopenbox(msg='some message',
                    title='some title', default='c:\some_directory\some_directory\*.file_type',
                    filetype='*.file_type')

其中file_type是任何类型的文件。.txt,.dat等,