繁体   English   中英

Django中的MultiValueDictKeyError和AttributeError有何关联?

[英]How is MultiValueDictKeyError and AttributeError related in Django here?

我在Django中有一个函数,试图从这里的上一个问题中解决。 在尝试自己的解决方案时,我进行了重大更新,但遇到错误。

我现在正在尝试:

def view_routes(request, query=None):
routes = None

if query is None:
    routes = Route.objects.all()

else:
    #View: Routes in Queried Boundary
    if request.method == 'POST':
        return HttpResponse("OK")
    elif request.method == 'GET':
        json_feature = json.loads(request.GET.get('geo_obj', False))
        #json_feature = json.loads(request.GET['geo_obj'])
        geom = make_geometry_from_feature(json_feature)
        routes = Route.objects.filter(wkb_geometry__within=geom[0])
        print("Total Routes Filtered: " + str(Route.objects.filter(wkb_geometry__within=geom[0]).count()))

        #Render to Django View
        routes_json = serialize('geojson', routes, fields=('route_type', 'route_long', 'route_id', 'wkb_geometry',))
        routes_geojson = json.loads(routes_json)
        routes_geojson.pop('crs', None)
        routes_geojson = json.dumps(routes_geojson)

        #return render(request, 'plexus/view_routes.html', {'routes':routes})
        return redirect('routes_view', query)

我在这两行之间切换/注释时遇到麻烦:

json_feature = json.loads(request.GET.get('geo_obj',False))

json_feature = json.loads(request.GET ['geo_obj'])

两者都分别出现错误:

TypeError:JSON对象必须为str,而不是'bool'

django.utils.datastructures.MultiValueDictKeyError:“'geo_obj'”

内部带有AJAX的已编辑函数:

function sendQueryData(url, query){
    url =url.replace('query' , query);

    if (query === ""){
        alert("City Input Required");
    }else{
        if(geo_obj === null){
            alert("Click Search Button...")
        }else{

            $.ajax({
                beforeSend: function(xhr, settings) {
                    if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
                        xhr.setRequestHeader("X-CSRFToken", csrftoken);
                    }
                },
                type: "GET",
                url: url,
                dataType: 'html',
                data: {
                    'geo_obj' : JSON.stringify(geo_obj)
                },
                success: function(data){
                    alert(data);
                    window.location.href = url;
                    //var result = $('<div />').append(data).find('#list-group').html();
                    //$('#list-group').html(result);
                },
                error: function(xhr, textStatus, errorThrown) {
                    alert('Request Failed' + textStatus + ":" + errorThrown);
                }
            });
        }
    }
}

如果要传递原始JSON,请尝试使用json.loads(request.body)request.GET['foo']用于表单编码的数据

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM