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/')     
Вернуться на верх