Обновлять JavaScript без обновления страницы. Django framework
Я не знаю, как работает AJAX, поэтому обращаюсь за помощью к ребятам. Просто хочу обновить свой javascript файл без обновления главной страницы. Обычно при обновлении главной страницы обновляется django views.py и таким образом я получаю данные. Я уверен, что это возможно с помощью AJAX, как я где-то видел, но не уверен, как это работает.
Мой javascript:
<script type="text/javascript" src="https://ajax.microsoft.com/ajax/jQuery/jquery-1.4.2.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.4/dist/Chart.min.js"></script>
<script type="text/javascript">
/*extend leadlet - you should include the polli*/
L.RotatedMarker = L.Marker.extend({
options: {
angle: 0
},
_setPos: function (pos) {
L.Marker.prototype._setPos.call(this, pos);
if (L.DomUtil.TRANSFORM) {
// use the CSS transform rule if available
console.log(this.options.angle);
this._icon.style[L.DomUtil.TRANSFORM] += ' rotate(' + this.options.angle + 'deg)';
} else if(L.Browser.ie) {
// fallback for IE6, IE7, IE8
var rad = this.options.angle * (Math.PI / 180),
costheta = Math.cos(rad),
sintheta = Math.sin(rad);
this._icon.style.filter += ' progid:DXImageTransform.Microsoft.Matrix(sizingMethod=\'auto expand\', M11=' +
costheta + ', M12=' + (-sintheta) + ', M21=' + sintheta + ', M22=' + costheta + ')';
}
}
});
L.rotatedMarker = function (pos, options) {
return new L.RotatedMarker(pos, options);
};
var locations = {{ data|safe }};
var PlaneIcon = L.Icon.extend({
options: {
iconUrl: '{% static "media/plane.png" %}',
iconSize: [25, 25], // size of the icon
popupAnchor: [-3, -76] // point from which the popup should open relative to the iconAnchor
}
});
var map = L.map('map',{
keyboard: false,
dragging: false,
zoomControl: false,
boxZoom: false,
doubleClickZoom: false,
scrollWheelZoom: false,
tap: false,
touchZoom: false,
center: [66.008759, -0.666570],
zoom: 8,
minZoom: 8,
maxZoom: 0
});
var tileLayer = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: '© OpenStreetMap contributors' }).addTo(map);
for (var i = 0; i < locations.length; i++) {
marker = new L.rotatedMarker([locations[i][5], locations[i][6]],{icon: new PlaneIcon({iconUrl: '{% static "media/" %}'+locations[i][0]+".png"}), angle: (locations[i][4] - 45)})
.bindPopup(locations[i][0]+" - Registration: "+locations[i][1]+ " - Distance: "+locations[i][9]+ " Heading: "+locations[i][4]+ " Speed: "+locations[i][3])
.addTo(map);
}
</script>
Мой views.py:
from rest_framework import viewsets
from django.views.generic import ListView
from .serializers import Flightserializer
from .models import Flights
from django.shortcuts import render
class FlightViewSet(viewsets.ModelViewSet):
queryset = Flights.objects.all().order_by('aircraft')
serializer_class = Flightserializer
class HomePageView(ListView):
model = Flights
template_name = 'home.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['data'] = [
[
obj.aircraft,
obj.registration,
obj.altitude,
obj.ground_speed,
obj.heading,
obj.latitude,
obj.longtitude,
obj.flying_from,
obj.flying_to,
obj.distance
]
for obj in Flights.objects.all()
]
return context