0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Django】hrefのパス指定をミスすると、ページが2回読み込まれる?【Python】

Last updated at Posted at 2021-07-02

djangoを使ったプロジェクトで納品されたフロントの改修を行っていたある日。
データもちゃんと渡せてるし見た目も整ったかな、と思いふとコンソールを見た私。
そこに飛び込んできたのはNoSuchKeyのエラー。

あれ…?でもページはちゃんと表示されてるんだが…何が起こってるんだ…?

状況

viewsには1つ引数がある。内部の処理はあまり関係ないので省略。
以下がviews.pyの中身。

views.py
def myapp(request, text="mock_data"):
    print(f"======================= {text} ==========================")
    context = {"text": text}
    return render(request, "models/regression/data.html", context)

当初は受け取ったtext内のデータを使って辞書からデータ取り出してたのだが、ここでエラーが出てた。
でも表示はできてる。
そこでこの簡略化したページを表示してみたところ...

terminal
======================= 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

( ゚д゚) ナニコレ

なぜか二回目が読み込まれている。
しかもなぞのデータが渡されている。

原因

この渡されてるやつ。どうやらタブに表示するために指定してるアイコンらしい。
ここを納品時の状態のままにしていたせいで、起こってたエラーらしい。
そのコードがこちら

base.html
    <link href="./favicon.ico" rel="shortcut icon" type="image/x-icon">

いろいろ試した結果、このhrefの中身が相対パス./~~で指定されてるのが問題らしい。
/から始めたところ何の問題もなかった。
これ、/~~と指定すると、ドメイン/~~となって、
./~~とすると、現在URL/~~が読み込まれるぽい。
ふつうはそんなパスないぞって404が出るんだけど、今回は一番後ろに引数を用意してたから、
これが引数に入れる値ね!(アタイッテバサイキョーネ!)とかってに理解して読み込んでエラーはいていたらしい。

今までこの404エラー、単純にアイコンファイルないってエラーだと思ってたから無視してたけど、パスの指定方法が悪かったんだなと理解した。

対策

アイコンとかファイルを指定したいときはstaticを使って読み込むように修正しよう。

base.html
-    <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">

これで解決!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?