Не удается запустить функцию Django из html-шаблона с помощью ajax

Я пытаюсь запустить функцию Django после события клика от пользователя с помощью Ajax внутри JS кода в HTML файле шаблона Django.

блок javascript

kml_layer.addListener('click', (kmlEvent) => {
  setMapOnAll(null);
  var clickedPoint = kmlEvent.latLng;
  newPoint.postMessage(clickedPoint.lat() + "," + clickedPoint.lng())
  console.log("layer id is " + "{{ single_layer.id }}");
  runKmOnSource("{{ single_layer.id }}", kmlEvent); //Here is where I called the ajax jquery function
});

Аякс вызов

    function runKmOnSource(theID,kmlEvent,){
        console.log("started ajax")
        $(document).ready(function () {
                        $.ajax({
                        type: "POST",
                        url: "{% url 'get_km_from_source' %}",
                        data: {
                            csrfmiddlewaretoken: '{{ csrf_token }}',
                            layer_id: theID,
                            the_element_string_id: kmlEvent.featureData.id,
                            clicked_lat: kmlEvent.latLng.lat,
                            clicked_lng: kmlEvent.latLng.lng
                        },   /* Passing the text data */
                        success: function (response) {
                            console.log("ajax success");
                            kmOnSource.postMessage(response)

                        }
                    });
                });

    }

urls.py

    path('get_km_from_source/', get_km_from_source, name='get_km_from_source'),

и наконец Django/python view

def get_km_from_source(request):
    """
    A function that takes data from the ajax function 
    parsing it then ending back the result
    """
    print("xxxxxxxxxxxxxxxxsssssssssss started kmonsource") #This line to test if function executed
    layer_id = request.POST['layer_id']
    the_element_string_id = request.POST['the_element_string_id']
    clicked_lat = request.POST['clicked_lat']
    clicked_lng = request.POST['clicked_lng']
    layer_object = models.MapLayers.objects.get(id=layer_id)
    print(f"layer object is {layer_object}")
    water_element_object = None
    nearest_cord = None
    first_cord = None
    last_cord = None
    for water_element in layer_object.waterelement_set.all():
        if water_element.id_string == the_element_string_id:
            water_element_object = water_element
            break
    for single_cord in water_element_object.cordsforwaterelement_set.all():
        if nearest_cord is None:
            nearest_cord = single_cord
        else:
            cord_dist = calc_dist(clicked_lat, clicked_lng, single_cord.latlng.split(",")[
                0], single_cord.latlng.split(",")[1])
            nearest_cord_dist = calc_dist(clicked_lat, clicked_lng, nearest_cord.latlng.split(
                ",")[0], nearest_cord.latlng.split(",")[1])
            if cord_dist < nearest_cord_dist:
                nearest_cord = single_cord
    first_cord = water_element_object.cordsforwaterelement_set.filter(index=0)[
        0]
    last_cord = water_element_object.cordsforwaterelement_set.filter(index=nearest_cord.index - 1) if is_between(
        f"{clicked_lat},{clicked_lng}", f"{first_cord.latlng}", f"{nearest_cord.latlng}") else nearest_cord
    loop_index = 0
    total_dist = 0
    while loop_index < last_cord.index:
        one_obj = water_element_object.cordsforwaterelement_set.filter(index=loop_index)[
            0]
        two_obj = water_element_object.cordsforwaterelement_set.filter(
            index=loop_index + 1)[0]
        total_dist += calc_dist(one_obj.latlng.split(",")[0], one_obj.latlng.split(
            ",")[1], two_obj.latlng.split(",")[0], two_obj.latlng.split(",")[1])
        loop_index += 1
    total_dist += calc_dist(last_cord.latlng.split(",")[0], last_cord.latlng.split(",")[
        1], clicked_lat, clicked_lng)
    return HttpResponse(f"{total_dist}", status=201)

здесь представление Python никогда не выполняется при попытке вызвать функцию в JS-коде.

Вернуться на верх