2013-02-27 23 views
5

私は該当するヘルプを何も受け取っていないので、私はこの質問を何度も聞いています。django ajaxの更新でjson辞書を返す方法

私の問題は、私はajaxレスポンスとしてテンプレートにクエリ結果を返す方法を知らないということです。

私はこれでした:

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

今何が起こることはそれだけで.sortierennachの内容を置き換え、そのようにDjangoのDICをレンダリングされていないことです。その後、私のアヤックスdone機能がこれを行う

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") 

を私はこれを行うことができます:

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

誰かがASEあなたのAjaxコードで今、あなたはAjaxの機能に値を移入しようとしている場合おかげでたくさん

+2

サーバーのコンテンツを変更していないので、この種のソート機能を使用するには、POSTではなくGETメソッドを使用する必要があります。将来、ETagなどを添付してレスポンスをキャッシュできます。 – LtWorf

答えて

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で動くもの用に2つのテンプレートを作成します。最初の部分テンプレートは、AJAXで更新されている間に更新したいHTMLの特定のビットのみを含む部分テンプレートです。 2番目はラッパーで、ビューが正常に呼び出されたときに使用できます。ここに私の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

ありがとう、私は今これを試してみます..私はちょうどjsonの代わりに '' render_to_response''を使用するでしょうか? – doniyor

+0

Yessir。 HTML文字列を送信するだけの場合は、JSONを使用する必要はありません。 –

+0

それは動作していません – doniyor

1

は、最初のあなたが

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") 

のようなJSONオブジェクトにクエリセットオブジェクトを変換する必要が...あなたを私を助けてjsonデータを受信します。

したがって、このlocsデータを使用することで、Ajaxでhtmlを生成することも、やりたいことを何でもできます。

+0

ありがとう、私はショットを与えます – doniyor

関連する問題