Estoy tratando de pasar un conjunto de consultas en views.py de django a d3.js.
vistas.py:
def index(solicitud): qs = DCPOWERSTATS.objects.all().values('TS','PuE').order_by('TS') return render(solicitud, 'dashboard/dash.html', context=qs} )
guión.html:
<!DOCTYPE html> <meta charset="utf-8"> <style> .chart div { font: 10px sans-serif; background-color: steelblue; text-align: right; padding: 3px; margin: 1px; color: white; } </style> <div class="chart"></div> <script src="//d3js.org/d3.v3.min.js"></script> <script> var data = {{ data_json }}; var x = d3.scale.linear() .domain([0, d3.max(data)]) .range([0, 420]); d3.select(".chart") .selectAll("div") .data(data) .enter().append("div") .style("width", function(d) { return x(d) + "px"; }) .text(function(d) { return d; }); </script>Necesito hacer cambios en views.py y dash.html para crear algo como: https://bl.ocks.org/mbostock/3885304
Todas las respuestas anteriores son confusas. Necesito una solución para views.py y dash.html. También necesito saber la manera perfecta de enviar los resultados del conjunto de consultas a javascript.
¡Gracias!
Debe convertir sus modelos en listas/diccionarios simples para poder convertirlos en JSON. Decidiste usar values() en el conjunto de consultas. También hay serialización Django .
A pesar de la serialización, tiene dos opciones aquí.
O crea una vista que devuelve directamente datos JSON usando JsonResponse .
from django.http import JsonResponse def index(request): qs = DCPOWERSTATS.objects.all().values('TS','PuE').order_by('TS') # slice the queryset to hit the database and convert into list return JsonResponse(qs[:])Ahora puede cargar estos datos en el lado del cliente mediante una llamada ajax.
html (usando jQuery)
// assuming you have registered your view at '/dcpowerstats' $.ajax({ url: "http://example.com/dcpowerstats", success: function(data) { console.log(data); } });O renderiza sus datos JSON directamente en la plantilla HTML usando. En este caso, debe agregar sus datos serializados a la vista y usar la etiqueta de plantilla allí.
vista
import json from django.shortcuts import render def index(request): qs = DCPOWERSTATS.objects.all().values('TS','PuE').order_by('TS') # slice the queryset to hit the database and convert into list context = {'data_json': json.dumps(qs[:])} return render(request, 'dashboard/dash.html', context=context)html
<script> var data = {{ data_json|safe }}; </script>La forma de elegir depende de su interfaz y preferencias.
Si solo necesita algunos datos estáticos disponibles en sus vistas javascript, elegiría la opción de plantilla.
Si su interfaz necesita poder cargar diferentes cosas dinámicamente y la cantidad de datos es mayor, elija la segunda opción. En este caso, también consideraría usar django rest framework .