plotly.offline.plot
имеет параметр output_type='div'
, который заставляет функцию plot возвращать только div, содержащий html графика.
plotly.offline.plot(data, include_plotlyjs=False, output_type='div')
Вы можете сохранить этот div в переменной и передать его в шаблон.
Ниже приведен минимальный рабочий пример.
Обратите внимание, что мы импортируем plotly.js в заголовок файла шаблона и используем фильтр safe .
view.py
from django.views.generic import TemplateView
import plotly.offline as py
import plotly.graph_objs as go
import numpy as np
class IndexView(TemplateView):
template_name = "plots/index.html"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['plot'] = examplePlot()
return context
def examplePlot():
# Makes a simple plotly plot, and returns html to be included in template.
x = np.linspace(0, 12.56, 41)
y = np.sin(x)
y2 = np.sin(1.2*x)
data = [
go.Scatter(
name = 'Sin(x)',
x=x,
y=y,
),
go.Scatter(
name = 'Sin(1.2x)',
x=x,
y=y2,
),
]
layout = go.Layout(
xaxis=dict(
title='x'
),
yaxis=dict(
title='Value',
hoverformat = '.2f'
),
)
fig = go.Figure(data=data, layout=layout)
plot_div = py.plot(fig, include_plotlyjs=False, output_type='div')
return plot_div
участки / index.html
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Plotly test</title>
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
</head>
<body>
{{plot|safe}}
</body>
</html>
Вот скриншот результата, который является интерактивным.