djangoを使ってリストや辞書形式でデータ取得したものをjsに渡してグラフ描画したいです。
リストや辞書形式でデータ取得したものをどういう過程を経てjsに渡せますか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
よくやる手法としては、Python/JavaScriptどちらでも容易に扱えるJSONを仲介することが多いです。
DjangoのテンプレートにJSON文字列を渡す
とりあえず感触を得たい・Python→JSのケースがそんなに多くないならこれで十分です。
概要
Pythonでなら、json.dumps
でPythonオブジェクトをJSON文字列に変換できます。
この内容をDjangoテンプレートに引き渡して、JSON.parse
でJS側でオブジェクトに変換すれば、
JS側で利用することが出来ます。
コード例
python
1## views.py 2import json 3from django.shortcuts import render 4 5def index(request): 6 data = { 7 'sample1': [1, 2, 3], 8 'sample2': [3, 6, 9], 9 } 10 return render(request, "index.html", {'data_json': json.dumps(data)})
html
1<!-- index.html --> 2<html> 3 <script> 4 const data = JSON.parse('{{ data_json|safe }}'); 5 6 console.log(data.sample1); // [1, 2, 3] 7 </script> 8</html>
Django側でJSONレスポンスを返すviewを用意する
「グラフ描画を動的に変えたい」など、テンプレート渡しでは対応し難いケースで必要になってきます。
概要
Djangoではいくつかの種類でレスポンスを返せるようなクラスが提供されているのですが、
その中にはJSONも含まれています。
JsonResponse
では引数にオブジェクトを渡すと上記のjson.dumps
と同等のことを行ってレスポンスを返してくれます。
コード例
python
1## views.py 2import json 3from django.http.response import JsonResponse 4 5 6def data_json(request): 7 # /data のURLで受け付けるview関数 8 data = { 9 'sample1': [1, 2, 3], 10 'sample2': [3, 6, 9], 11 } 12 return JsonResponse(data)
html
1<!-- index.html --> 2<html> 3 <script> 4 fetch("/data") 5 .then(response => response.json()) 6 .then(data => { 7 console.log(data.sample1) // [1, 2, 3] 8 }) 9 </script> 10</html>
余談:Django REST Frameworkを活用する
上記の「Django側でJSONレスポンスを返すviewを用意する」の派生として、
Web API向けの拡張ライブラリであるDjango REST Framework
が存在します。
DjangoをAPIサーバーとして扱うならこういった型を使うと良いケースもあります。
投稿2020/10/22 15:03
総合スコア2740
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/24 14:25
2020/10/25 06:43