Django : отображение данных, полученных через ajax вызов, на html
Я совсем новичок в django и пытаюсь сделать что-то простое. Я создаю карту с визуализацией данных, я показываю пользователю простую svg-карту, которая поможет сделать следующее: 1-пользователь нажимает на одну из областей карты. 2 - визуализация данных этой конкретной выбранной области будет отображена.
Сначала я отправляю название области (которое я получил из пути svg) с помощью Jquery, ajax вызова в python, это мой main.js :
$(document).ready(function(e) {
$('path').on('focus', function(e) {
e.preventDefault();
$('#selection').html($(this).attr('name'));
var gov = $('#selection').text();
console.log(gov)
var obj = { gov}
$.ajax({
type: 'POST',
url: '/map/',
contentType: 'application/json; charset=utf-8', //EDITED
data: gov,
success: function(data) {},
error: function(rs, e) {
}
});
});
});
Затем я передаю имя в python, Вот как выглядит my views.py:
[views.py][1]
from django.shortcuts import render
import numpy as np
import pandas as pd
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
# Create your views here.
@csrf_exempt
def map(request):
if request.method=='POST':
data = request.body.decode("utf-8")
gover=str(data)
print(gover)
df = pd.read_csv('https://raw.githubusercontent.com/-/datandvi/main/ndvid.csv',
encoding='utf-8',na_values=None)
d = df[(df['Date'] >= '1984-01-01') & (df['Date'] <= '1985-01-01') & (df['Province'] ==gover )]
print(d)
datadate = d[['Date']].values.tolist()
dataplot = d[['Data_long_term_Average']].values.tolist()
def numpy_flat(a):
return list(np.array(a).flat)
k = numpy_flat(dataplot)
k1 = numpy_flat(datadate)
context={ 'gover':gover,'k': k, 'k1': k1 }
return render(request,'index.html',context)
else:
return render(request,'index.html')
здесь
Каждый раз, когда я выбираю область, данные, которые я хочу отобразить, печатаются в терминале. данные выбранной области печатаются, но не отправляются в html, но я пытаюсь отправить их на html страницу, не получается, контекстная переменная пустая. Не могли бы вы помочь?
Я не смогу дать точный ответ, пока вы не добавите свои шаблоны, но я могу помочь немного почистить ваш код.
Попробуйте ниже и дайте мне знать:
main.js
$(document).ready(function(e) {
$('path').on('focus', function(e) {
e.preventDefault();
$('#selection').html($(this).attr('name'));
const gov = $('#selection').text();
console.log(gov)
let obj = gov
$.ajax({
type: 'POST',
url: '/map/',
contentType: 'json', // or try deleting this line
data: {
'gov': gov
},
success: function(data) {
console.log(data);
console.log(data.gov);
console.log(data.k);
},
error: function(data) {
console.log('error', data)
}
});
});
});
views.py
@csrf_exempt
def map(request):
if request.method=='POST':
data = request.POST.get('gov')
gover=str(data)
print(gover) #this prints to your command prompt
df = pd.read_csv('https://raw.githubusercontent.com/-/datandvi/main/ndvid.csv',
encoding='utf-8',na_values=None)
d = df[(df['Date'] >= '1984-01-01') & (df['Date'] <= '1985-01-01') & (df['Province'] ==gover )]
print(d)
datadate = d[['Date']].values.tolist()
dataplot = d[['Data_long_term_Average']].values.tolist()
def numpy_flat(a):
return list(np.array(a).flat)
k = numpy_flat(dataplot)
k1 = numpy_flat(datadate)
data={
'gover':gover,
'k': k,
'k1': k1
}
return JsonResponse(data, status=200)
return redirect('/index.html/')