Python+Bottle+BootStrapで画面ロード時にJavaScriptやCSSが読み込めずに404

Python+Bottle」の組み合わせで簡単なアプリを作っているが、JavaScriptCSSが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となった。