使用AJAX

时间:2019-12-06 12:03:54

标签: python django ajax

有人可以帮助我解决这个问题吗? 我是Django的新手,我一直在尝试创建一个基于Web的应用程序,该应用程序可以获取用户位置并通过我在网上关注的教程来显示其周围的商店。但是,初始值被硬编码在views.py中,以更改用户的位置。为了找到最佳解决方案,我曾问过一个问题,有人建议使用AJAX。 几个小时以来,我一直在想出一个解决方案,它使我发疯。我以前从未使用过AJAX,因此对此表示歉意。

到目前为止,这是我所拥有的,运行应用程序时没有任何问题或错误,但是,对于用户的位置,值没有更改

请参阅附件代码

views.py

user_location = Point(0, 0, srid=4326)

def process_loc(request):

    lat = float(request.GET.get('lat'))
    lon = float(request.GET.get('lon'))
    global user_location
    user_location = Point(lat, lon, srid=4326)
    return render(request, 'shops/index.html', {'lat': lat, 'lon': lon})



class Home(generic.ListView):
    model = Shop
    context_object_name = 'shops'
    queryset = Shop.objects.annotate(distance=Distance('location',
    user_location)
    ).order_by('distance')[0:15]
    template_name = 'shops/index.html'

可以看出,我声明了user_location位于函数之外,然后对其进行了更改 在函数内部,因此可以在Home类中使用

index.html

<head>
        <meta charset="utf-8">
        <title>Shops</title>
        <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.4.1.min.js"></script>
</head>

<body>
<script>
    $(document).ready(function() {

                     var lat, lon;

                     lat = 100.347541;
                     lon = -87.321;

                        $.ajax({
                    type: "GET",
                    url: 'process_loc',
                    data:{
                    'lat': lat,
                    'lon': lon,
                            },
                dataType : "json",
                success: function(stores) {
                    // do whatever in here for success, errors
                }
                })

                    })
</script>
</body>

我正在将此代码用于AJAX,目前我只是用HTML硬编码这些值,以使其首先工作,因为我迫切希望找到解决方案。

urls.py

urlpatterns = [
                path("admin/", admin.site.urls),
                path("", views.Home.as_view()),
                path('', include('pwa.urls')),
                path("search/", views.SearchResultsView.as_view()),
                path('process_loc', views.process_loc, name='process_loc'),

            ]

服务器运行时的输出

[06/Dec/2019 12:00:57] "GET / HTTP/1.1" 200 11312
[06/Dec/2019 12:00:57] "GET /process_loc?lat=100.347541;&lon=-87.321 HTTP/1.1" 200 6621
[06/Dec/2019 12:00:58] "GET /manifest.json HTTP/1.1" 200 342
[06/Dec/2019 12:00:59] "GET /serviceworker.js HTTP/1.1" 200 3228

对此我们的任何答复,我们将不胜感激,对于代码混乱,我深表歉意,谢谢。

1 个答案:

答案 0 :(得分:0)

我认为值不会改变,因为在此处的ajax请求定义中已硬编码了

<script>
    $(document).ready(function() {

                     var lat, lon;

                     lat = 100.347541;
                     lon = -87.321;

                        $.ajax({
                    type: "GET",
                    url: 'process_loc',
                    data:{
                    'lat': lat,
                    'lon': lon,
                            },
                dataType : "json",
                success: function(stores) {
                    // do whatever in here for success, errors
                }
                })

                    })
</script>

那么您可能会有一个包含两个输入的表单,将插入的内容放入其中并放入请求中

    $(document).ready(function() {
                     //here get values from inputs
                     var lat, lon;

                     lat = 100.347541; //set here
                     lon = -87.321; //set here

                        $.ajax({
                    type: "GET",
                    url: 'process_loc',
                    data:{
                    'lat': lat,
                    'lon': lon,
                            },
                dataType : "json",
                success: function(stores) {
                    // do whatever in here for success, errors
                }
                })

                    })