Подтвердить что ты не робот

Как встроить автономные графики bokeh в шаблоны django

Я хочу отображать графики, предлагаемые библиотекой bokeh в моем веб-приложении через фреймворк django, но я не хочу использовать исполняемый файл bokeh-server, потому что это нехороший способ. так возможно? если да, как это сделать?

4b9b3361

Ответ 1

Используя пример документации Вложения Bokeh Plots, предложенный Фабио Плейгером, можно сделать это в Django:

в файле views.py, мы помещаем:

from django.shortcuts import render
from bokeh.plotting import figure
from bokeh.resources import CDN
from bokeh.embed import components

def simple_chart(request):
    plot = figure()
    plot.circle([1,2], [3,4])

    script, div = components(plot, CDN)

    return render(request, "simple_chart.html", {"the_script": script, "the_div": div})

в файле urls.py мы можем поставить:

from myapp.views import simple_chart 
...
...
...
url(r'^simple_chart/$', simple_chart, name="simple_chart"),
...
...

в файле шаблона simple_chart.html у нас будет:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Experiment with Bokeh</title>
    <script src="http://cdn.pydata.org/bokeh/release/bokeh-0.8.1.min.js"></script>
    <link rel="stylesheet" href="http://cdn.pydata.org/bokeh/release/bokeh-0.8.1.min.css">
</head>
<body>

    {{ the_div|safe }}

    {{ the_script|safe }}
</body>
</html> 

И это работает.

Ответ 2

Вам не нужно использовать bokeh-сервер для встраивания графиков боке. Это просто означает, что вы не будете использовать (и, вероятно, не нуждаетесь) дополнительные функции, которые он предоставляет.

Фактически вы можете встраивать графики bokeh во многих отношениях, например генерировать автономный html, создавая автономные компоненты bokeh, которые затем можно вставлять в ваше приложение django при визуализации шаблонов или с помощью метода, который мы называем "автозагрузкой", что делает bokeh возвратом тега который заменит собой участок Боке. Вы найдете более подробные сведения о документации .

Другим хорошим источником вдохновения является примеры встраивания, которые вы можете найти в репозитории.

Ответ 3

Он должен поместить {{the_script | safe}} в тег заголовка

Ответ 4

Также возможно, чтобы он работал с запросами AJAX. Скажем, мы загрузили страницу и хотели бы показать график при нажатии кнопки без перезагрузки всей страницы. Из представления Django мы возвращаем Bokeh script и div в JSON:

from django.http import JsonResponse
from bokeh.plotting import figure
from bokeh.resources import CDN
from bokeh.embed import components

def simple_chart(request):
  plot = figure()
  plot.circle([1,2], [3,4])

  script, div = components(plot, CDN)

  return JsonResponse({"script": script, "div": div})

Когда мы получаем ответ AJAX в JS (в этом примере используется JQuery), div сначала добавляется к существующей странице, а затем добавляется script:

$("button").click(function(){
  $.ajax({
    url: "/simple_chart", 
    success: function(result){
      var bokeh_data = JSON.parse(result);
      $('#bokeh_graph').html(bokeh_data.div);
      $("head").append(bokeh_data.script);
  }});
});

Ответ 5

Здесь флеш-приложение, которое использует jquery для соединения с графиком bokeh. Проверьте templates/ на javascript, который вы можете повторно использовать. Также найдите bokeh-demos на github.