Ich habe das folgende Setup. Ich habe eine einfache index.html
durch Apache serviert. Es sieht wie folgt aus.Getting chart.js zur Arbeit mit Django und Apache
Alles oben genannte versucht, ein Liniendiagramm auf dem Browser zu platzieren. Es verwendet chart.js
. Um dies zu erreichen, versucht der customcharts.js
, sich mit einem lokal laufenden django
Server zu verbinden. Die obige html durch Apache läuft auf Port 8080 bedient wird, während django läuft auf Port 8090.
die customcharts.js
wie sieht
function renderChart(data){
console.log(data)
console.log(data.labels)
defaultLabels = data.labels
defaultData = data.defaultData
var ctx = document.getElementById("myChart").getContext('2d');
var myChart = new Chart(ctx, {
type: 'line',
data: {
labels: defaultLabels,
datasets: [{
lineTension: 0,
label: 'Activity Profile',
data: defaultData,
}]
}
})
}
var endpoint = 'http://localhost:8090/polls/alice/'
var defaultData = []
var defaultLabels = []
$.ajax({
url: endpoint,
dataType: "JSONP",
success: renderChart,
method: 'GET'
}
);
Ferner meine django
Ansicht ist
def json_response(func):
"""
A decorator thats takes a view response and turns it
into json. If a callback is added through GET or POST
the response is JSONP.
"""
def decorator(request, *args, **kwargs):
objects = func(request, *args, **kwargs)
if isinstance(objects, HttpResponse):
return objects
try:
data = simplejson.dumps(objects)
if 'callback' in request.REQUEST:
# a jsonp response!
data = '%s(%s);' % (request.REQUEST['callback'], data)
return HttpResponse(data, "text/javascript")
except:
data = simplejson.dumps(str(objects))
return HttpResponse(data, "application/json")
return decorator
epoch = datetime.datetime.utcfromtimestamp(0)
r = redis.StrictRedis(host='localhost', port=6379, db=0)
threat_list = ['date', 'categories', 'mix']
@json_response
def index(request, uid):
print uid
uid = uid.rstrip('/')
_key = uid
retjsondict = {}
input_keys = [_key + ':' + x for x in threat_list]
k = input_keys[0]
retdict = {}
if r.exists(k):
retvalue = r.get(k).strip('"')
xdata_dt = [x.split(':')[0] for x in retvalue.split(' ')]
ydata_dt = [x.split(':')[1].rstrip(',') for x in retvalue.split(' ')]
retdict['defaultLabels'] = xdata_dt
retdict['defaultData'] = ydata_dt
print retdict
return JsonResponse(retdict)
die index
ist die echte Ansicht und die json_response
ist ein Dekorateur.
Allerdings, wenn ich versuche, es auf einem Browser anzeigen http://localhost
ich mit dem folgenden Fehler
XMLHttpRequest laden können nicht http://localhost:8090/polls/alice/ bekommen. No Der 'Access-Control-Allow-Origin'-Header ist auf der angeforderten -Ressource vorhanden. Ursprung 'http://localhost' ist daher nicht erlaubt.
Kann mir jemand zeigen, was ich mache? Jede Hilfe/Zeiger geschätzt.
ist 'customcharts.js' eine statische Ressource? –
ja es ist eine statische Ressource – broccoli