djangoを使ったプロジェクトで納品されたフロントの改修を行っていたある日。
データもちゃんと渡せてるし見た目も整ったかな、と思いふとコンソールを見た私。
そこに飛び込んできたのはNoSuchKey
のエラー。
あれ…?でもページはちゃんと表示されてるんだが…何が起こってるんだ…?
状況
viewsには1つ引数がある。内部の処理はあまり関係ないので省略。
以下がviews.pyの中身。
def myapp(request, text="mock_data"):
print(f"======================= {text} ==========================")
context = {"text": text}
return render(request, "models/regression/data.html", context)
当初は受け取ったtext
内のデータを使って辞書からデータ取り出してたのだが、ここでエラーが出てた。
でも表示はできてる。
そこでこの簡略化したページを表示してみたところ...
======================= test ==========================
[02/Jul/2021 14:57:30] "GET /myapp/test HTTP/1.1" 200 17524
======================= favicon.ico ==========================
[02/Jul/2021 14:57:31] "GET /myapp/favicon.ico HTTP/1.1" 200 17524
( ゚д゚) ナニコレ
なぜか二回目が読み込まれている。
しかもなぞのデータが渡されている。
原因
この渡されてるやつ。どうやらタブに表示するために指定してるアイコンらしい。
ここを納品時の状態のままにしていたせいで、起こってたエラーらしい。
そのコードがこちら
<link href="./favicon.ico" rel="shortcut icon" type="image/x-icon">
いろいろ試した結果、このhref
の中身が相対パス./~~
で指定されてるのが問題らしい。
/
から始めたところ何の問題もなかった。
これ、/~~
と指定すると、ドメイン/~~
となって、
./~~
とすると、現在URL/~~
が読み込まれるぽい。
ふつうはそんなパスないぞって404が出るんだけど、今回は一番後ろに引数を用意してたから、
これが引数に入れる値ね!(アタイッテバサイキョーネ!)とかってに理解して読み込んでエラーはいていたらしい。
今までこの404エラー、単純にアイコンファイルないってエラーだと思ってたから無視してたけど、パスの指定方法が悪かったんだなと理解した。
対策
アイコンとかファイルを指定したいときはstatic
を使って読み込むように修正しよう。
- <link href="./favicon.ico" rel="shortcut icon" type="image/x-icon">
+ {% load staticfiles %}
+ <link href="{% static 'img/icon_normal.svg' %}" rel="shortcut icon" type="image/x-icon">
これで解決!