2013-02-27 40 views
5

由於我沒有收到任何適用的幫助,我多次詢問此問題。如何在django ajax中返回json字典更新

我的問題是,我不知道如何返回查詢結果模板作爲ajax響應。

我這樣做:

if request.path == "/sort/": 
    sortid = request.POST.get('sortid') 
    locs = Location.objects.order_by(sortid) 
    if request.is_ajax(): 
     return HttpResponse(locs,mimetype="application/json") 

那麼我的阿賈克斯done功能做到這一點:

}).done(function(data){ 
$('.sortierennach').html(data); 
}); 

什麼,現在的情況是,它只是取代了.sortierennach內容,不渲染Django的DIC所以我可以這樣做:

{% for loc in locs %} 
    {{loc.name}} 
{% endfor %} 

有人可以ASE幫我...非常感謝

+2

對於這種類型的排序功能,您應該真正使用GET方法,而不是POST,因爲您不會更改服務器上的任何內容,所以將來您可以附加ETag或類似緩存響應。 – LtWorf 2013-02-27 07:32:38

回答

4

您需要將您的對象列表導出到JSON字典。

if request.path == "/sort/": 
    sortid = request.POST.get('sortid') 
    locs = Location.objects.order_by(sortid) 
    if request.is_ajax(): 
     import json 
     return HttpResponse(json.dumps(locs), mimetype="application/json") 

但是,這需要您使用某種類型的客戶端模板系統。

更好的方法是使用Django的render_to_response快捷方式。你實際上並不需要用JSON做出迴應。你可以用一個字符串來回應請求。

我通常爲AJAX驅動的東西創建兩個模板。第一個是部分模板,它只包含我想在AJAX更新期間更新的HTML特定位。第二個是一個包裝器,可以在正常調用視圖時使用。

一個廉價的例子,這是我object_list.html:

<ul id='object-list'> 
    {% for object in object_list %} 
     <li>{{ object.value }}</li> 
    {% endfor %} 
</ul> 

這是我的base.html文件:

<html> 
<title>Example</title> 
    <body> 
     {% include 'object_list.html' %} 
    </body> 
</html> 

對於視圖,你要做到這一點:

from django.shortcuts import render_to_response 
from django.template import RequestContext 

from models import Location 

def view(request): 
    locs = Location.objects.order_by(sortid) 
    if request.is_ajax(): 
     return render_to_response('object_list.html', {'object_list': locs}, context_instance=RequestContext(request)) 
    return render_to_response('base.html', {'object_list': locs}, context_instance=RequestContext(request)) 

這讓我們通過標準的GET或通過XHTTP請求正常調用視圖,只返回您想要的部分HTML更新。便利!

+0

謝謝你,我現在就試試這個..所以我只會用''render_to_response''而不是json,對吧? – doniyor 2013-02-27 10:03:31

+0

Yessir。如果您只是通過HTML字符串發送,則不需要使用JSON。 – 2013-02-27 10:09:16

+0

它不工作 – doniyor 2013-02-27 11:14:21

1

如果你想填充在AJAX功能的價值首先你需要將查詢集對象轉換成JSON對象像

if request.path == "/sort/": 
    sortid = request.POST.get('sortid') 
    locs = Location.objects.order_by(sortid) 
    if request.is_ajax(): 
     locs = json.dumps(locs) 
     return HttpResponse(locs,mimetype="application/json") 

現在您的Ajax代碼你將收到json數據。

所以通過使用這個loc數據,你可以在Ajax中生成你的html或者你想做的任何事情,你可以做到這一點。

+0

謝謝,我會給出一個鏡頭 – doniyor 2013-02-27 10:04:27