2009-10-11 43 views
0

我想一个值发送到server.I使用发送:问题与阿贾克斯/ jQuery和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的地方!

+0

请发布您的实际错误页面的相关位,或指定发生此故障时发生的情况。 – 2009-10-11 17:03:55

回答

2

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

例如,如果您的模板有类似{{ place.name }}的东西,那么它将不会打印任何内容,因为查询集没有name属性。

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

+0

我已经完成了,如你所说。见下面我的评论。 事情是,我无法得到'查询'打印的意思lon没有价值! – thikonom 2009-10-11 17:37:31

0

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

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

老实说,这段代码通常是很麻烦的......这将有助于了解Places.longtitude是否真的是一个字符串,如果它是一个字符串,您为什么决定这么做?

因为地方永远不能没有,你要检查一个空的查询集在这种情况下,你会写

if not place: 

我想我们需要更多的信息,那么你已经给了我们帮助你在所有。

0

DR是现货,但缺少一点东西。当你在jQuery中进行这种调用时,你会遇到一个巨大的缺点,你不能使用Django模板语言。当你写出正常的观点时,你会完全像DR解释的那样。但是,既然你正在用javascript来做这件事,你想做两件事。

  • 既然你不能依靠Django的自动转义,你需要手动escpape用户输入的值,如place.name
  • 您返回的数据将需要以JSON格式返回。这并不是非常必要,但它会使你更轻松地处理JavaScript中的数据。 Django附带了simplejson库,您可以重新使用它,但我建议使用json库,可以使用它来轻松地将python对象转换为json。
0

删除'周围长了jQuery

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

应该

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

你的观点从来没有看到的是 '长' 是在请求​​。使用jquery post方法和django可能会混淆,因为{}之间的内容结构不同。

+0

不!在JavaScript中,{“long”:“30”}表示使用值为30的键“long”创建一个对象。{long:“30”}表示创建一个对象,其值为30 – 2009-10-13 05:56:37

+0

如果是这种情况,这是行不通的。我没有名为url,title或tags的变量。 var item = $(this).parent(); item.find(“#id_url”)。val(), title:item.find(“#id_title”)。val(), tags:item.find(“#id_tags” ).val() }; ($(“li”,result).get(0)).post(“/ save /?ajax”,data,function(result){ if(result!=“failure”) ; item.remove(); $( “ul.bookmarks .edit”)点击(bookmark_edit);} 其他 { 警报( “无法保存之前验证书签。”);} }); – 2009-10-13 20:34:53

+0

尴尬!无视我所说的一切。 – 2009-10-13 21:19:12