【问题标题】:Send data, query a table based on that data and render发送数据,根据该数据查询表并渲染
【发布时间】:2018-11-30 04:41:49
【问题描述】:

我正在开发空间数据基础设施。它基于使用 Django 创建的 webapp。 webapp有一张地图,你可以在上面画多边形。根据您绘制的多边形,应将具体数据返回给客户端。

所以流程看起来像这样:你在地图上放置点,第三个点之后它变成一个多边形。您按下一个按钮,触发 putData js 函数并使用 GET 请求将数据发送到适当的视图,并且视图将数据放入 postgres 数据表中。到目前为止一切都很好。

在 putData 函数的成功回调中,我指定了另一个没有数据的 get 请求。处理此请求的视图从上面指定的 postgres 表中获取最后一行,使用最后一行中的值对另一个数据表进行查询,并使用 html 页面呈现查询结果。 问题是渲染永远不会发生。我按下按钮的页面保持原样,不会发生重定向。

TL;DR:我想通过 get 请求将数据放入 postgres 表中,从该表中获取值,查询第二个表并使用从第二个数据表中获得的值呈现第二个 html 页面。

ma​​in.js

function putData() {
    //Biggest and lowest values from the arrays.
    console.log('YAYYYYYYYYYYYYYYYYYYYYYYYYYYYYY');
    var maxX = Math.max(...boundingBox.X);
    var minX = Math.min(...boundingBox.X);
    var maxY = Math.max(...boundingBox.Y);
    var minY = Math.min(...boundingBox.Y);
    //AJAX request to getdata view with the four coorinates.
    $.ajax({
        url: "getdata/",
        type: "get",
        data: {'max_x': maxX, 'min_x': minX, 'max_y': maxY, 'min_y': minY},
        success: function () {
            console.log("Success!");
            $.ajax({
                url: "dowload",
                type: "get",
                success: function () {
                    console.log("Success!");
                }
            })
        }
    })
}

get_data.py

def get_data(request):
    maxX = request.GET['max_x']
    minX = request.GET['min_x']
    maxY = request.GET['max_y']
    minY = request.GET['min_y']
    extents = {
        'max_x': maxX,
        'min_x': minX,
        'max_y': maxY,
        'min_y': minY,
    }

    query = Query(max_x=maxX, min_x=minX, max_y=maxY, min_y=minY, username=username)
    query.save()
    return HttpResponse(extents)

printdata.py

def download(request):
    last_query = Query.objects.last()
    extents = {
        'max_x': last_query.max_x,
        'min_x': last_query.min_x,
        'max_y': last_query.max_y,
        'min_y': last_query.min_y,
    }
    """
    The **query** to the second datatable happens here.
    """
    return render(
        request,
        'output.html',
        context=query_result,
    )

你能告诉我这可能是什么原因吗?我错过了什么吗?

我确信回调函数不是解决这个问题的最佳方法,所以我也愿意寻求更好的解决方案。

【问题讨论】:

  • 当您将成功函数更改为包括:success: function (res) {console.log(res);} 时,您会看到什么?
  • 在第二个成功函数上,我得到了 output.html 的骨架,没有所需的数据。但是在调试模式下,所有数据都是正确的,而且看起来渲染不太好。当然没有重定向

标签: python django xmlhttprequest


【解决方案1】:

据我了解,您正在尝试从 ajax 调用中渲染 django 模板来解决您问题的第二部分。我认为这是不必要的。试试这样:

  url: "getdata/",
        type: "get",
        data: {'max_x': maxX, 'min_x': minX, 'max_y': maxY, 'min_y': minY},
        success: function () {
            console.log("Success!");
            window.location = '/download'  // will forcefully change the url of the browser to load the page.
        }
    })
}

第一个视图的响应也应该是 JsonResponse:

from django.http import JsonResponse


def get_data(request):
    maxX = request.GET['max_x']
    minX = request.GET['min_x']
    maxY = request.GET['max_y']
    minY = request.GET['min_y']
    extents = {
        'max_x': maxX,
        'min_x': minX,
        'max_y': maxY,
        'min_y': minY,
    }

    query = Query(max_x=maxX, min_x=minX, max_y=maxY, min_y=minY, username=username)
    query.save()
    return JsonResponse(extents)  # this is if you want to use these json data in Javascript

【讨论】:

  • 谢谢,这可能很好。如果我没有得到更好的解决方案,你会得到我的支持。但实际上我的问题是,为什么渲染不起作用?
  • 渲染作品,你已经看到了(就我在问题中阅读你的 cmets 而言),但你得到的是空的 html,因为你是通过 Ajax 调用它。所以你需要去那个 url <your_domain>/downloads/ 来加载页面。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
  • 2021-07-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多