2014-05-18 78 views
2

是否有可能使用烧瓶来浏览文件目录?python烧瓶浏览目录与文件

我的代码从来没有像正常工作,因为字符串之间的附加字符发生。

另外我不知道如何实现一种检查路径是文件还是文件夹。

这里是我的瓶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) 

回答

5

path转换器(docs链路)在url结构比硬编码所有不同的可能路径结构更好。

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功能从烧瓶进口。

+0

谢谢你,它有点作品。然而,我遇到的问题是,有时URL中的'/'没有正确添加。 – RG337

+0

我写了上面的代码作为起点。在检查路径是否是使用'os.path.isdir'的目录之后,可以添加追加'/'的逻辑。 – vivekagr