ajax / jquery和django的问题

时间:2009-10-11 16:59:54

标签: jquery ajax django

我想向服务器发送一个值。我使用以下方式发送它:

$.post("http://127.0.0.1:8000/search/",{'long':"30"});

我的 views.py 是:

def search(request):   
    lon = request.POST.get('long','')  
    place = Places.objects.filter(longtitude__icontains=lon)  
    if place is not None:  
        return render_to_response('sr.html', {'place': place, 'query': lon})  
    else:  
        return HttpResponse("NOTHING FOUND")  

但我无法在数据库中搜索经度为30的地方!!!!

4 个答案:

答案 0 :(得分:2)

filter()会返回 queryset ,而不是单个项目。因此,您调用place的变量将不是Places对象,而是包含一个或多个位置的查询集。

例如,如果您的模板具有{{ place.name }}之类的内容,则不会打印任何内容,因为查询集没有name属性。

假设最终会有几个具有相同经度的地方,您需要使用{% for place in places %}循环遍历模板中的查询集。

答案 1 :(得分:0)

你确定你甚至在调用这个函数吗?

我会尝试打印出每个值,包括地点。由于Place.objects.filter不能返回None,因此您应该获得某种查询集,即使它是空的。

老实说,这段代码一般都是错误的......如果Places.longtitude真的是一个字符串,那将会有所帮助,如果它是一个字符串,为什么你决定这样做呢?

因为地方永远不能是无,你想检查一个空的查询集,在这种情况下你会写吗

if not place:

我认为我们需要更多信息,然后您已经给我们提供帮助了。

答案 2 :(得分:0)

DR现场,但遗漏了一点。当你在jQuery中执行此调用时,会遇到一个巨大的缺点,就是不能使用Django模板语言。当您编写普通视图时,您将完全像DR解释的那样。但是,由于您使用javascript执行此操作,因此您需要执行两项操作。

  • 由于您不能依赖Django的自动转义,您需要手动设置用户输入的值place.name
  • 您返回的数据需要以JSON格式返回。这不是非常必要的,但它会使您更容易处理javascript中的数据。 Django附带了simplejson库,您可以依赖它,但我建议使用json库,您可以使用它轻松地将python对象转换为json。

答案 3 :(得分:0)

删除jquery中的'around long

$.post("http://127.0.0.1:8000/search/",{'long':"30"}); 

应该是

$.post("http://127.0.0.1:8000/search/",{long:"30"});

您的观点永远不会在请求中看到'long'。使用jquery post方法和django可能会让人感到困惑,因为{}之间的内容结构不同。