2016-10-06 26 views
0

我嘗試用瓶掃描所有文件中的特定文件夾,並建立了網址鏈接自動這些文件,所以首先我定義在燒瓶內的應用程序路徑:變量在Jinja2的模板,通過瓶進口複製

homepath = os.getcwd() # the root path of the app 
@app.route('/<folder>/')   
def showList(folder): 
    folder_abs_path = homepath + '/static/'+folder 
    files = os.listdir(folder_abs_path) 
    return render_template('blog_list.html', files=files, folderName=folder) 

,並創建一個模板的Jinja2像:

{% extends "base.html" %} 
{% block body %} 
<div id="main-contents"> 
    <ul> 
    {% for item in files %} 
    <li><a href="{{ folderName +'/'+ item }}"> {{ item }}</a></li> 
    {% endfor %} 
    </ul> 
</div> 
{% endblock %} 

當燒瓶運行時,我輸入:

http://localhost:5000/test/ 

它工作,列出我的測試文件夾中的所有文件(即「file1.md」和「file2.md」),但它不會爲文件啓用正確的url鏈接,當我單擊file1.md在本地網頁,它引導到像一個網址:

http://localhost:5000/test/test/file1.md 

我要的是「http://localhost:5000/test/file1.md」,那麼,爲什麼有兩個「測試」文件夾名稱?

+0

你生成一個相對路徑,你必須使它絕對的。看到生成的來源。 –

+0

由於url將作爲GET消息發送到服務器,所以它不能是絕對路徑,或者您有任何解決方案,目前我手動在模板中添加文件夾名稱。 – cjhang

回答

0

正如@Klaus在評論中所說,您正在爲靜態文件生成相對路徑。爲了避免這種情況,只需使用url_for()函數模板的路徑發生:

{% extends "layouts/main.html" %} 
{% block content %} 
<div id="main-contents"> 
    <ul> 
    {% for item in files %} 
    <li><a href="{{ url_for('static', filename=folderName + '/' + item)}}"> {{ item }}</a></li> 
    {% endfor %} 
    </ul> 
</div> 
{% endblock %} 
+0

對於您的解決方案,它生成的URL將是「http:// localhost:5000/static/test/file1.md」,並且它將重定向到orignal文件,而不是我想要發送到服務器的GET請求。 我目前通過爲不同的文件夾使用不同的模板來避免這個問題。 – cjhang

+0

那你的目標究竟是什麼?發送一個請求到'test/file1.md'目前不做任何事情。 – Dauros