Instead of writing the html to a file you can have plotly return the html part of the graph as a string. For example, using a class based TemplateView:
EDIT: Update for using recent (as of 2021/08) versions of plotly. The template does not need any changes.
import plotly.graph_objects as go
class Graph(TemplateView):
template_name="graph.html"
def get_context_data(self, **kwargs):
context = super(Graph, self).get_context_data(**kwargs)
x = [-2,0,4,6,7]
y = [q**2-q+3 for q in x]
trace1 = go.Scatter(x=x, y=y, marker={'color': 'red', 'symbol': 104, 'size': "10"},
mode="lines", name="1st Trace")
layout=go.Layout(title="Meine Daten", xaxis={'title':'x1'}, yaxis={'title':'x2'})
figure=go.Figure(data=['trace1'],layout=layout)
context['graph'] = figure.to_html()
return context
This is the original code:
import plotly.offline as opy
import plotly.graph_objs as go
class Graph(TemplateView):
template_name="graph.html"
def get_context_data(self, **kwargs):
context = super(Graph, self).get_context_data(**kwargs)
x = [-2,0,4,6,7]
y = [q**2-q+3 for q in x]
trace1 = go.Scatter(x=x, y=y, marker={'color': 'red', 'symbol': 104, 'size': "10"},
mode="lines", name="1st Trace")
data=go.Data([trace1])
layout=go.Layout(title="Meine Daten", xaxis={'title':'x1'}, yaxis={'title':'x2'})
figure=go.Figure(data=data,layout=layout)
div = opy.plot(figure, auto_open=False, output_type="div")
context['graph'] = div
return context
and the template:
{% if graph %}
<div style="width:600;height:500">
{{ graph|safe }}
</div>
{% endif %}