Django、Python、そしてWeb開発全般についてはまったくの初心者なので、ご容赦ください。私がやりたいのは、matplotlibを使用して作成したグラフを表示することです。ホームページが自動的にグラフのpngにリダイレクトされるように動作していました(基本的には、グラフが表示されたブラウザのタブ)。しかし、今私が望んでいるのは、グラフが埋め込まれた実際のホームページを表示することです。つまり、ナビゲーションバーなどを表示し、サイトの本体にグラフを表示したいのです。
これまで検索して、これを実現する方法についてある程度のアイデアを得ました。私が考えているのは、単にグラフを返す特別なビューを用意することです。次に、何らかの方法で、テンプレートの img src タグからこの png 画像にアクセスし、データを表示するために使用します。
グラフコード:
from django.shortcuts import render
import urllib
import json
from django.http import HttpResponse
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure
import datetime as dt
import pdb
def index(request):
stock_price_url = 'https://www.quandl.com/api/v3/datatables/WIKI/PRICES.json?ticker=GOOGL&date.gte=20151101&qopts.columns=date,close&api_key=KEY'
date = []
price = []
#pdb.set_trace()
source_code = urllib.request.urlopen(stock_price_url).read().decode()
json_root = json.loads(source_code)
json_datatable = json_root["datatable"]
json_data = json_datatable["data"]
for day in json_data:
date.append(dt.datetime.strptime(day[0], '%Y-%m-%d'))
price.append(day[1])
fig=Figure()
ax = fig.add_subplot(1,1,1)
ax.plot(date, price, '-')
ax.set_xlabel('Date')
ax.set_ylabel('Price')
ax.set_title("Google Stock")
canvas = FigureCanvas(fig)
response = HttpResponse(content_type='image/png')
#canvas.print_png(response)
return response
テンプレートコード:
{% extends "home/header.html" %}
{% block content %}
<p>Search a stock to begin!</p>
<img src="home/graph.py" />
{% endblock %}
私が今得ているもの:
ベストアンサー1
この質問はmatplotlibとしてタグ付けされているのは知っていますが、私も同じことをする必要があり、陰謀的な使いやすく、見た目も魅力的になります。グラフをプロットするだけで、ビューでグラフの HTML コードを取得できます。
# fig is plotly figure object and graph_div the html code for displaying the graph
graph_div = plotly.offline.plot(fig, auto_open = False, output_type="div")
# pass the div to the template
テンプレートで次の操作を実行します。
<div style="width:1000;height:100">
{{ graph_div|safe }}
</div>