【Django】DataFrameでTemplateに渡した値をforループで取り出す方法

【Django】DataFrameでTemplateに渡した値をforループで取り出す方法

結論から言うと、pythonが初めて覚えるプログラミング言語である場合は悩まなかったのだと思います。
私の場合は「PHPで覚えた方法が邪魔をしてたな」と言うのが正直な感想です。

Forループで取り出そうとしてうまくいかなかったScript

#DataFrame形式の値の中身
mx = {
  [2020-05-03, 23.8],
  [2020-11-22, 21.5],
  [2020-05-10, 20.8],
  [2020-03-22, 20.5],
  [2020-05-17, 19.5],
  columns=["index", "temp"]
}
#template.html

(前略)

<ul class="list-unstyled top_profiles scroll-view">
  {% for item in mx %}
    <li class="media event">
      <a class="pull-left border-aero profile_thumb">
        <i class="fa arrows-v aero"></i>
      </a>
      <div class="media-body">
        <p class="title"> {{ item.index }} </p>
        <p><strong> {{ item.temp }} </strong> </p>
      </div>
    </li>
  {% endfor %}
</ul>

最初書いたのはPHPと同じ構成でした。コレだと値が何も表示されません。

色々調べた結果たどり着いた姿

#template.html

(前略)

<ul class="list-unstyled top_profiles scroll-view">
  {% for index,item in mx.items %}
    <li class="media event">
      <a class="pull-left border-aero profile_thumb">
        <i class="fa arrows-v aero"></i>
      </a>
      <div class="media-body">
        <p class="title"> {{ index|date:"Y年m月d日 (D) }} </p>
        <p><strong> {{ item|floatformat:1 }} </strong> </p>
      </div>
    </li>
  {% endfor %}
</ul>

Pythonではindexの値も表示したい場合、辞書のkeyとvalueを同時に変数に渡す

pythonの基本の様です。
上の正しい実装からforループの場所だけ抽出します。

{% for index,item in mx.items %}
  {{ index|date:"Y年m月d日 (D) }}
  {{ item|floatformat:1 }}
{% endfor %}

今回は、変数名にindex,itemという2つを用意しました。

indexの方にはインデックス指定した日付データが入ります。
しかし、{{index}}とすると時間まで表示されてしまうので、|を使ってフォーマットを指定しています。

itemの方には数字が入っています。
なぜか13.9999999999という数字が表示される箇所があったので、こちらも|を使いフォーマットの指定をしました。
floatformat:3とすると小数点第三位まで表示されるようになります。

これを【 {% for item in mx %} 】として始めるとどうやってもインデックスにした日付データが取り出せません。

まとめ

すんなりいけると思ったら意外と苦戦しました。

WEB上にも同様の記事(と言うか質問)が複数上がっていたので同じ悩みを持った方も多かったのかなと思います。

\ 最新情報をチェック /

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください