2016-12-16 28 views
0

我有一個關於url_for Unable to open files in python flask- 404 not found的問題。但被標記爲重複。使用url_for創建鏈接到輸出文件夾中的excel文件

我的要求很簡單。在主頁面中創建指向輸出文件夾中文件的href鏈接。我嘗試了幾乎所有的線程,因爲答案似乎不適合我。我非常新的python。請幫忙。下面是一個示例代碼,我已經試過

from flask import Flask, redirect, url_for,send_from_directory 
    app = Flask(__name__)  

    @app.route('/main') 
    def index(): 
     print 'test' 
     return '''<a href="{{ url_for('uploaded_file', filename='a.txt') }}">Open file</a>''' 

    @app.route('/out/<filename>') 
    def uploaded_file(filename): 
     print filename 
     return send_from_directory('./out/', 
            filename) 
    @app.route('/out/<filename>') 
    def uploaded_file2(filename): 
     print filename 
     return './out/'+filename 

    if __name__ == '__main__': 
     app.run(debug = True) 

回答

0

您的應用程序的目錄結構應該是這樣的所以這段代碼會工作。如果在out文件夾中找不到文件名,那麼你會看到「url not found」:

app/ 
    app.py 
    static/ 
     out/ 
      a.txt 
    templates/ 
    index.html 

from flask import Flask, render_template, redirect, url_for,send_from_directory 

app = Flask(__name__) 

app.config.update(
     UPLOAD_FOLDER = "static/out/" 
) 

@app.route('/main') 
def index(): 
    print ('test') 
    return render_template('index.html') 

@app.route('/out/<filename>') 
def uploaded_file(filename): 
    print (filename) 
    return send_from_directory(app.config["UPLOAD_FOLDER"], filename) 

@app.route('/showfilepath/<filename>') 
def uploaded_file2(filename): 
    print (filename) 
    return app.config["UPLOAD_FOLDER"] + filename 

if __name__ == '__main__': 
    app.run(debug = True) 

# index.html 
<a href="{{url_for('uploaded_file', filename='a.txt')}}">open file</a> 

# a.txt 
hey there ... 
+0

非常感謝!有效。但是,如果Index.html的內容直接放在返回值中,則它不起作用:code'@app.route('/ main') def index(): print('test') return'' 'open file''' #return render_template('index.html')'code' – kten

+0

也有可能將href標記完全作爲參數傳遞? HTML是我寫的,當我嘗試。 – kten

+0

明白了!我們可以使用{{variable | safe}}接受參數中的html。安全關鍵字允許html標籤 – kten

相關問題