【问题标题】:Handling Nested Directories In Flask处理 Flask 中的嵌套目录
【发布时间】:2020-10-27 12:24:05
【问题描述】:

我正在尝试使用 Flask 构建文件夹查看器应用程序。但我坚持处理嵌套的子文件夹。 我不知道我的文件夹里有多少个目录

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!"

这是我的代码。我只能查看第一个子文件夹。例如,如果我的子文件夹有子文件夹,我无法访问或创建 /Subfolder1/Subfolder2/Subfolder3 之类的链接到该文件夹​​。

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


是否有一种自动化的方式来处理或链接以查看该子文件夹。

@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!"

该功能使我可以访问第一个子文件夹。但我正在寻找所有子文件夹的功能。 不久,我将尝试复制这个简单的服务器(使用 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() 

【问题讨论】:

  • 这不是问题。我想做的是简单的 TCP 服务器,我可以查看和下载主目录中的文件。但是在 Flask 中我不能显示每个子目录,因为我不能为每个子目录编写路由函数。例如,如果我有 300 个子目录,我如何显示该子目录中的文件。不久我正在尝试制作这样的服务器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()
  • 我不认为有一种自动或现有的方法可以深入研究您传入的目录的内部子文件夹。您必须使用os 模块构建自定义函数来实现这一点。至少我是这么看的。
  • 我发送了一段代码。这就是我想在 Flask 中做的事情。我会尝试补充问题。
  • 好的,去看看

标签: python flask directory subdirectory


【解决方案1】:

您可以使用os.walk() 递归遍历一个目录及其所有子目录,使用以下代码。

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

因此,您可以将其放入一个函数中,当传入 path 时,该函数将返回文件夹。然后,您可以递归调用以获取您提到的文件夹,例如/Subfolder1/Subfolder2/Subfolder3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    相关资源
    最近更新 更多