comment intégrer des graphiques bokeh autonomes dans les modèles django

je veux afficher les graphiques offerts par la bibliothèque bokeh dans mon application web via le framework django mais je ne veux pas utiliser l'exécutable bokeh-server parce que ce n'est pas la bonne façon. donc, est-ce possible? si oui comment le faire?

29
demandé sur bigreddot 2015-04-08 10:53:55

5 réponses

Intégration De Flou D'Arrière-Plan Des Parcelles exemple de documentation comme suggéré par Fabio Pliger, on peut le faire en Django:

dans le views.py dossier, nous avons mis:

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})

dans le urls.py le fichier que nous pouvons mettre :

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

dans le fichier template simple_chart.html nous aurons :

<!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> 

et ça marche.

50
répondu iMitwe 2016-02-14 16:43:40

vous n'avez pas besoin d'utiliser bokeh-server pour intégrer bokeh plots. Cela signifie simplement que vous n'utiliserez pas (et probablement pas besoin) les fonctionnalités supplémentaires qu'il fournit.

en fait, vous pouvez intégrer les tracés bokeh de plusieurs façons, comme générer du html autonome, en générant des composants bokeh autonomes que vous pouvez ensuite intégrer dans votre application django lors du rendu de gabarits ou avec la méthode que nous appelons "autoloading" qui fait que bokeh renvoie une balise qui se remplacera par un traceur Bokeh. Vous trouverez de meilleurs détails en regardant le documentation.

une autre bonne source d'inspiration est le incorporer des exemples vous pouvez trouver dans le référentiel.

5
répondu Fabio Pliger 2015-04-08 11:17:20

Il faut mettre {{the_script|coffre-fort}} à l'intérieur de la tête la balise

2
répondu Xavi Moreno 2015-09-20 15:08:52

il est également possible de le faire fonctionner avec des requêtes AJAX. Supposons que nous ayons une page chargée et que nous souhaitions afficher un graphique en cliquant sur le bouton sans recharger la page entière. De Django vue de nous retourner le Bokeh de script et de div en 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})

lorsque nous obtenons une réponse AJAX dans JS (dans cet exemple Jquery est utilisé), le div est d'abord ajouté à la page existante, puis le script est ajouté:

$("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);
  }});
});
2
répondu Andrey Grachev 2017-01-29 17:20:42

Voici un Flasque app qui utilise jquery pour interagir avec une parcelle de bokeh. Découvrez templates/ pour javascript, vous pouvez réutiliser. Cherchez aussi bokeh-demos sur github.

1
répondu hobs 2017-09-17 21:30:18