2012-12-22 54 views
4

我正在開發一個使用Flask的SAAS應用程序,我希望用戶能夠創建/上傳/使用他們自己的自定義模板。這是我的目錄結構是怎樣現在:Flask:如何從模板目錄提供靜態文件?

/flaskapp 
    /application.py 
    /static 
     /style.css 
    /templates (site & admin templates goes here) 
     /hello.html 
    /userdata 
     /user1 
      /template1 
       hello.html 
      /template2 
       hello.html 
     /user2 
      /template1 
       hello.html 
      /template2 
       hello.html 

我能夠使用服務通過這個計算器問題找到了解決方案用戶指定的模板:How to dynamically select template directory to be used in flask?,但我怎麼從服務模板目錄靜態文件。我不想提供來自/flaskapp/static/的靜態文件,而是使用/flaskapp/userdata/<user>/<current-template>/static/目錄中的靜態文件,並在運行時動態確定。這個怎麼做?

+0

當你說'/ flaskapp/something'你的意思是網址或目錄名嗎?請每次都說:使用該目錄中的靜態文件提供此URL。否則我只是不知道你的意思。 –

+0

這裏'/ flaskapp/something'是指目錄而不是URL。 – anujkk

回答

0

大概你在使用Flask前面的web服務器。解決這個問題的方法之一(當我使用Apache + mod_wsgi作爲自定義WSGI應用程序時,我通常使用這種方法)是直接通過Web服務器從磁盤提供目錄。在Apache上,我只是使用Alias指令來做到這一點。

如果您想要改變每個用戶在給定URL下提供的文件,您必須通過Flask管道文件。你必須弄清楚如何正確路由請求;之後,您可能可以使用wsgi.file_wrapper發送正確的文件(但我不確定如何通過Flask獲取此文件)。

0

這是我用來從任何系統目錄提供文件。

該應用程序搜索的特定目錄特定所需的文件:

當有人訪問HTTP

:/host/where/to/serve/files/example_file.txt應用程序將嘗試返回example_file。 txt作爲附件,如果該文件不存在,它將返回一個404.

您可以調整它並使用您的用戶變量構建DIRECTORY_TO_SERVE_PATH。

如果您有任何限制,您還應該驗證要提供的文件,因爲這將返回路徑中存在的任何文件。

import os 
from flask import abort, send_from_directory 


DIRECTORY_TO_SERVE_PATH = '/where/files/are/in/disk/' 


@app.route('/where/to/serve/files/<path:filename>') 
def download_file(filename): 
    if os.path.exists(DIRECTORY_TO_SERVE_PATH + filename): 
     return send_from_directory(DIRECTORY_TO_SERVE_PATH, filename, as_attachment=True) 
    else: 
     abort(404) 
相關問題