2014-03-03 88 views
16

According to the Flask readme,藍圖靜態文件可通過blueprintname/static訪問。但由於某種原因,它不起作用。Flask blueprint靜態目錄不起作用?

我的藍圖是這樣的:

  • app/frontend/views.py

    frontend = Blueprint('frontend', __name__, template_folder='templates', static_folder='static') 
    
    @frontend.route('/') etc... 
    
  • app/frontend/js/app.js:我的javascript在瓶的應用程序(路線工作和一切)註冊

  • 藍圖

當我去abc.com/frontend/static/js/app.js,它只是給出了一個404

當我跟隨瓶自述讓我的靜態文件:

<script src="{{url_for('frontend.static', filename='js/app.js')}}"></script> 

輸出是

<script src="/static/js/app.js"></script> 

哪個沒有按」不管工作。我的根目錄app/static/文件夾中沒有任何內容。

我無法訪問藍圖中的任何靜態文件!燒瓶讀我說它應該工作!

admin = Blueprint('admin', __name__, static_folder='static') 

默認路徑的最右邊的部分是它是在網絡上曝光。由於該文件夾在此處稱爲靜態,因此它將在藍圖+ /靜態位置可用。假設藍圖註冊爲/ admin,靜態文件夾將位於/ admin/static。

+1

你是如何在應用程序中註冊藍圖的? –

+0

另外值得注意的是,你需要將你的JS文件放在'app/frontend/static/js/app.js'而不是'app/frontend/js/app.js'(注意包含一個'static'文件夾在你的文件路徑中)。 –

回答

12

我包含static_url_path參數的參數,以確保Blueprint的靜態路徑不會與主應用程序的靜態路徑發生衝突。

如:

admin = Blueprint('admin', __name__, static_folder='static', static_url_path='/static/admin') 
15

你可能註冊了您的藍圖坐在你的站點的根目錄:

app.register_blueprint(core, url_prefix='') 

但在藍圖static的觀點是從所有其他藍圖的觀點沒有什麼不同;它使用url_prefix值來使URL唯一。

核心static觀點活躍,所以你現在有要處理/static/網址兩條路線。因此,如果您註冊的藍圖沒有URL前綴,則必須給這兩條路徑中的一條路徑。

要麼給藍圖自定義static_url_path值,要麼核心Flask app

+1

謝謝,這在讀我時不清楚。把靜態看作是另一個路由URL是有道理的。這只是一個問題,因爲Blueprint和Flask應用程序的默認行爲都是使用'/ static /'。 –

0

它通過初始化藍圖configuration = Blueprint('configuration', __name__, template_folder='templates',static_folder='static'),然後引用像這樣的靜態文件href="{{ url_for('.static', filename='css/base.css') }}"爲我工作。在href中靜態之前有一個點。