2013-02-27 169 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") 

फिर मेरे ajax done समारोह करता है:

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

अब क्या होता है यह Django प्रस्तुत नहीं हो रही डीआईसी हां, कि यह सिर्फ .sortierennach की सामग्री को बदल देता है कि मैं यह कर सकता हूं:

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

कोई व्यक्ति अनुरोध कर सकता है ase मुझे बहुत

+2

उस तरह के एक प्रकार के फ़ंक्शन के लिए, आपको वास्तव में जीईटी विधि का उपयोग करना चाहिए, पोस्ट नहीं, क्योंकि आप सर्वर पर किसी भी सामग्री को नहीं बदल रहे हैं, इसलिए भविष्य में आप एक ईटीएजी या प्रतिक्रिया को कैश करने के समान ही संलग्न कर सकते हैं। – 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 संचालित चीजों के लिए दो टेम्पलेट्स बना देता हूं। पहला आंशिक टेम्पलेट है, जिसमें केवल HTML का विशिष्ट बिट शामिल है जिसे मैं AJAX- अद्यतन के दौरान अपडेट करना चाहता हूं। दूसरा एक रैपर है, जिसका उपयोग तब किया जा सकता है जब दृश्य सामान्य रूप से कहा जाता है।

एक सस्ता उदाहरण है, यहाँ मेरी 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)) 

यह चलिए सामान्य रूप से एक मानक जीईटी के माध्यम से, या एक एक्सएचटीटीपी अनुरोध के माध्यम से सामान्य रूप से कॉल किया जाता है, केवल आंशिक HTML को लौटाता है जिसे आप चाहते हैं अद्यतन करें। हैंडी!

+0

धन्यवाद आदमी दूंगा, मैं इसे आजमाउंगा .. इसलिए मैं सिर्फ जेसन के बजाय 'render_to_response'' का उपयोग करूंगा, है ना? – doniyor

+0

येसिर। यदि आप केवल HTML स्ट्रिंग पर भेज रहे हैं तो आपको JSON का उपयोग करने की आवश्यकता नहीं है। –

+0

यह – doniyor

1

मदद ... धन्यवाद आप ajax समारोह में मान के लिए सबसे पहले आप की तरह

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 वस्तु में क्वेरीसमूह वस्तु कन्वर्ट करने के लिए अपने ajax कोड में जरूरत की कोशिश कर रहे हैं, तो आप जेसन डेटा प्राप्त होगा।

तो इस लोक डेटा का उपयोग करके या तो आप अपने एचटीएमएल को अजाक्स में उत्पन्न कर सकते हैं या जो भी आप करना चाहते हैं, आप इसे कर सकते हैं।

+0

धन्यवाद, मैं एक शॉट – doniyor