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 перезагружается и скрипт вызывается снова.

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