Handling Nested Directories In Flask

Viewed 564

I am trying to build a folder viewer app with Flask. But i stuck at handling nested subfolders . I don't know how many directories in my folder

app = Flask(__name__)
folder_scheme = get_folder("Workspace")

@app.route("/")
def index():
    return render_template("index.html",folder_scheme= folder_scheme)

@app.route("/<string:folder>")
def subfolder_handler(folder):
    for subscheme in folder_scheme["subfolders"]:
        if subscheme["name"] == folder:
            return render_template("index.html",folder_scheme=subscheme)
    return "Nothing here!"

This is my code.I can only view first subfolders . For instance if my subfolders have subfolder i can't reach or make link like /Subfolder1/Subfolder2/Subfolder3 to that folder.

Workspace/
└── Subfolder1
    └── Subfolder2
        └── Subfolder3
           ├── file1
           ├── file2
           └── file3


Is there a automated way to handle or link to view that sub folders.

@app.route("/<string:folder>")
def subfolder_handler(folder):
    for subscheme in folder_scheme["subfolders"]:
        if subscheme["name"] == folder:
            return render_template("index.html",folder_scheme=subscheme)
    return "Nothing here!"

That function makes me reach to first subfolders . But i am looking for the function for all subfolders. Shortly I am trying to do some replicate of this simple server (with Flask).

import http.server
import socketserver

PORT = 8080
Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever() 

1 Answers

You can use os.walk() to recursively iterate through a directory and all its subdirectories using the following.

for root, dirs, files in os.walk(path):
    for folder in dirs:
       print(folder)

You can thus put this in a function which when passed in a path will return the folders. You can then recursively call to obtain the folders as you mentioned, e.g. /Subfolder1/Subfolder2/Subfolder3

Related