Django рендерит представление в зависимости от геолокации браузера
Я пытаюсь загрузить свою домашнюю страницу в соответствии с геолокацией, указанной браузером, если координаты в порядке, я загружаю список аэропортов вокруг этих координат, в противном случае я загружаю все аэропорты. Однако я не могу управлять этим между GET & POST запросами. Каждый раз я получаю все аэропорты на странице.
На самом деле при загрузке представления (по GET-запросу) отображаются все аэропорты, а после полной загрузки страницы возникает событие POST с информацией GPS. Таким образом, список аэропортов вокруг местоположения выполняется, но рендеринг всегда неправильный.
Большое спасибо за помощь
urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('',views.home_view),
views.py
def home_view(request):
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
ip = x_forwarded_for.split(',')[0]
else:
ip = request.META.get('REMOTE_ADDR')
if request.method == 'POST':
Latitude = float(request.POST.get('latitude'))
Longitude = float(request.POST.get('longitude'))
context = aviationweatherapi.getStationInfo(Latitude,Longitude)
print ("Get airports list around current GPS location")
else:
#The request is GET
context = aviationweatherapi.getStationInfo(None, None)
print ("Get all airports")
context.update({'IP':ip})
return render(request,'acceuil.html',context)
template_Base.html (основа acceuil.html)
<body>
{% csrf_token %}
{% block contenu %} {% endblock %}
<script src="https://code.jquery.com/jquery-3.6.0.js"></script>
<script src="https://code.jquery.com/ui/1.13.2/jquery-ui.js"></script>
<script>
const findLoc = () => {
const success = (position) => {
const latitude = position.coords.latitude;
const longitude = position.coords.longitude;
var data = {'latitude': latitude,
'longitude': longitude };
data.csrfmiddlewaretoken = $('input[name=csrfmiddlewaretoken]').val();
console.log('Location is on');
console.log(data);
document.getElementById("LocationLat").innerHTML = latitude;
document.getElementById("LocationLon").innerHTML = longitude;
$.post("/", data);
}
const error = () => {
console.log('Location gathering Not allowed')
const latitude = 0 // Default Latitude
const longitude = 0 // Default Longtitude
var data = {'latitude': latitude,
'longitude': longitude,
};
data.csrfmiddlewaretoken = $('input[name=csrfmiddlewaretoken]').val();
console.log(data);
document.getElementById("LocationLat").innerHTML = "err.latitude";
document.getElementById("LocationLon").innerHTML = "err.longitude";
$.post("/", data);
}
navigator.geolocation.getCurrentPosition(success,error);
}
// Location is fetched when user loads screen
Window.onload = findLoc();
</script>
Не видя navigator.geolocation.getCurrentPosition(success,error);, трудно понять, что именно происходит. Но одна вещь кажется странной. После запроса get автоматически вызывается пост, но затем при перезагрузке он будет снова и снова вызываться window.onload, потому что ваш base.html перезагружается и скрипт вызывается снова.