Как передать токен csrf между django и javascript

Я очень мало знаю о javascript.

У меня есть проект GeoDjango, и я добавляю представление карты некоторых данных с помощью Leaflet. Данных очень много, поэтому я использую Leaflet uGeoJSON Layer для отображения данных (это позволяет leaflet разместить ограничивающую рамку, чтобы Django мог фильтровать результаты и передавать только видимые данные).

Я добавляю leaflet в представление django.

У меня это работает с представлением на основе функций в django, которое я украшаю @csrf_exempt, но я хотел бы передавать правильные заголовки csrf, чтобы я мог использовать общие представления django на основе классов.

В документации к [Leaflet uGeoJSON Layer][1] предлагается:

var headers = {};

  // CSRF headers
  var token = jQuery("meta[name='_csrf']").attr("content");
  var header = jQuery("meta[name='_csrf_header']").attr("content");
  if (header) {
    headers[header]= token;
  }

  var customers = new L.uGeoJSONLayer({
    endpoint : "/layers/customers",
    headers: headers
  }).addTo(map);

Я добавил это в свой javascript, но токен и заголовок всегда null.

Вот мой javascript.

map.js

var headers = {};

  // CSRF headers
  var token = jQuery("meta[name='_csrf']").attr("content");
  var header = jQuery("meta[name='_csrf_header']").attr("content");
  if (header) {
    headers[header]= token;
  }

// Point Styles
var 
  DmseJobStyle = {
  fillColor: "#FFFFE0",
  color: "#FFFF00",
  opacity: 1,
  fillOpacity: 0.8
}

var
... 
  DmseJobData = new L.uGeoJSONLayer({endpoint: "data.jobs/",
    usebbox: true,
    headers: headers,
    pointToLayer: function (feature, latlng) {
            return L.circleMarker(latlng, DmseJobStyle)
    },
    onEachFeature:function(feature, layer) {
        layer.bindPopup('Job: ' + feature.properties.num + '</br>Desc: ' + feature.properties.desc);
    } 
  }),


var map = L.map('map', {
    center: [45.75, -64.99],
    zoom: 10,
    layers: [osm]
});

var overlayMaps = {
    ...
    "DMSE Jobs": DmseJobData,
};

Это находится в файле map.js, который загружается в мой шаблон django с помощью:

<script src="{% static 'core\map.js' %}"></script>

Если я добавлю точку останова, то при загрузке карты токен и заголовок будут равны null. Если я разрешаю ему продолжать, я получаю ошибку POST ... 403

В своем проекте я использую:

var csrf_token = $('input[name="csrfmiddlewaretoken"]').val();

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