Python+Bottle+BootStrapで画面ロード時にJavaScriptやCSSが読み込めずに404
「Python+Bottle」の組み合わせで簡単なアプリを作っているが、JavaScriptやCSSが404で見つからない。
192.168.210.100 - - [15/Jan/2017 13:42:14] "GET / HTTP/1.1" 200 1174
192.168.210.100 - - [15/Jan/2017 13:42:14] "GET /static/bootstrap-3.3.7-dist/css/bootstrap.min.css HTTP/1.1" 404 824
「あー、これ、ルートパスが変わるから見つけられないというよくあるやつか。」と昔の記憶を思い出して、ググるw。
見つかった。
「How to load a javascript or css file into a BottlePy template?」
この通り実施するも次のimport部分でエラー。
from Bottle import get_url
「get_urlなんて無いよ」と言われる。
「PythonのBottleフレームワークで静的ファイルのリンク生成」に同じことをしている人を発見。下記引用。
まず、get_urlはBottleクラスに移動されていました。
しかし、ソースを見ると
・・・・
こんな感じで、urlとしてラップされていますので、「url」を使用します。
結局、pythonは次のようにオマジナイ。
from bottle import static_file, url * @route('/static/:path#.+#', name='static') def static(path): return static_file(path, root='static') @route('/') @view('index') def index(): return {'get_url': url}
staticフォルダ配下に置いたindex.htmlは次のように書いて動作。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <!-- BootStrap --> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>トップ</title> <!-- Bootstrap --> <link href="/static/bootstrap-3.3.7-dist/css/bootstrap.min.css" rel="stylesheet"> </head> <body> ボディ部分 <!-- jQuery (necessary for Bootstrap's JavaScript plugins) --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <!-- Include all compiled plugins (below), or include individual files as needed --> <script src="/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script> </body> </html>
アクセスすると次のログが出て、無事成功。
192.168.210.100 - - [15/Jan/2017 14:29:49] "GET / HTTP/1.1" 200 1095
192.168.210.100 - - [15/Jan/2017 14:29:49] "GET /static/bootstrap-3.3.7-dist/css/bootstrap.min.css HTTP/1.1" 200 121200
192.168.210.100 - - [15/Jan/2017 14:29:49] "GET /static/bootstrap-3.3.7-dist/js/bootstrap.min.js HTTP/1.1" 200 37045
もう一度アクセスすると・・・。
192.168.210.100 - - [15/Jan/2017 14:30:20] "GET / HTTP/1.1" 200 1095
ログが表示されなくなった。404でも無いが200でも無い。どういうことか?
恐らく一度読み込んだらブラウザにキャッシュされて、2回目以降はリクエストしないのだろう。
試しにChromeからキャッシュを削除してみたら、200となった。