Flaskアプリを本番環境へ設置するとstaticディレクトリにアクセスできない

共用サーバーのcPanel管理画面でPythonアプリケーションを作成し、ローカルで動いているFlaskアプリをデプロイして動かしました。

ところが、どういうわけか、テンプレートファイルから参照しているstaticディレクトリ内の画像ファイルやスタイルシート、JavaScriptファイルにアクセスできません。

解決策

とりあえず、以下のように修正しました。

■変更前
<img src=”/static/img/sample.jpg” />

■変更後
<img src=”{{ url_for(‘static’, filename=’img/sample.jpg’) }}” />

要するに、url_for()関数でファイルのURIを動的に生成するというわけです。

しかし、本来ならFlask側でやってくれていても良さそうなことを、いちいちテンプレートファイルでやらなければならないのは、かなり面倒くさいです。

Flaskのバージョンアップの影響で、仕様が代わったのかなあ。

さらなる問題

url_forはあくまでもFlaskの機能なので、テンプレートファイルからアクセスしている静的ファイル(css/javascript/画像ファイル等)は、上記の方法で解決できますが、JavaScriptやCSS内部からアクセスしている場合は、この方法が使えません。

ふぅ、困りましたなあ・・