Участок и Запонки в Джанго - PullRequest
1 голос
/ 07 марта 2019

В настоящее время я экспериментирую с тем, как отображать графики в моих шаблонах django.У меня есть небольшой успех, преобразовав графики в изображение, а затем отобразить его в шаблоне.Но эта схема не подходит для интерактивных графиков, таких как Plotly и Cufflinks.

Как я могу встроить Plotly и Cufflinks в шаблон django, чтобы мой график был интерактивным?

1 Ответ

1 голос
/ 10 апреля 2019

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>

Вот скриншот результата, который является интерактивным. enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...