发送数据,根据该数据查询表并进行渲染

时间:2018-11-29 19:20:19

标签: python django xmlhttprequest

我正在开发空间数据基础架构。它基于使用Django创建的Web应用。 Web应用程序具有地图,您可以在其上绘制多边形。根据您绘制的多边形,应将特定数据返回给客户端。

因此流程如下所示:将点放在地图上,它会在第三个点之后变成多边形。您按下一个按钮,该按钮将触发一个putData js函数,并使用GET请求将数据发送到适当的视图,该视图将数据放入postgres数据表中。到现在为止一切都很好。

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

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

main.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,
    )

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

我确定回调函数不是解决此问题的最佳方法,因此我也愿意寻求更好的解决方案。

1 个答案:

答案 0 :(得分:0)

据我了解,您正在尝试通过ajax调用来呈现问题第二部分的django模板。我认为这是不必要的。尝试这样:

select regexp_extract('test=1233]','test=(.*?)]|.*',1);
--1233 (CORRECT)

select regexp_extract('test=1233]323]','test=(.*?)]|.*',1);
--1233 (CORRECT)

select regexp_extract('test=1233323abc','test=(.*?)]|.*',1);
--NULL (Should return 1233323abc)

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

  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.
        }
    })
}