2014-05-18 97 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