2009-10-11 40 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