2013-04-19 2 views
9

Ich benutze Ajax, um die Daten zu sortieren, die aus den Suchergebnissen kamen.Wie man nur einen Teil von HTML mit Daten rendert mit django

Jetzt frage ich mich, ob es möglich ist, nur einen Teil von HTML zu machen, so dass ich auf diese Weise geladen werden kann:

$('#result').html(' ').load('/sort/?sortid=' + sortid);

Ich tue dies, aber ich bin immer die ganze HTML-Seite als Antwort und es hängt die ganze html-Seite an die existierende Seite an, was schrecklich ist.

das ist mein views.py

def sort(request): 
    sortid = request.GET.get('sortid') 
    ratings = Bewertung.objects.order_by(sortid) 
    locations = Location.objects.filter(locations_bewertung__in=ratings) 
    return render_to_response('result-page.html',{'locs':locations},context_instance=RequestContext(request)) 

wie kann ich nur, dass <div id="result"> </div> aus meiner Sicht Funktion machen? oder was mache ich hier falsch?

Antwort

15

Von dem, was ich verstehe, möchten Sie die gleiche Ansicht auf eine andere Weise behandeln, wenn Sie eine Ajax-Anfrage erhalten. Ich würde vorschlagen, Ihre result-page.html in zwei Vorlagen zu teilen, eine, die nur das div enthält, das Sie wollen, und eine, die alles andere enthält und die andere Vorlage enthält (siehe django's include tag).

Ihrer Ansicht nach, dann können Sie so etwas wie die folgenden Möglichkeiten:

def sort(request): 
    sortid = request.GET.get('sortid') 
    ratings = Bewertung.objects.order_by(sortid) 
    locations = Location.objects.filter(locations_bewertung__in=ratings) 
    if request.is_ajax(): 
     template = 'partial-results.html' 
    else: 
     template = 'result-page.html' 
    return render_to_response(template, {'locs':locations},context_instance=RequestContext(request)) 

ergebnis seite.html:

<html> 
    <div> blah blah</div> 
    <div id="results"> 
     {% include "partial-results.html" %} 
    </div> 
    <div> some more stuff </div> 
</html> 

Teil results.html:

{% for location in locs %} 
    {{ location }} 
{% endfor %} 
+0

Sie sind Genius. Vielen Dank – doniyor

+0

Das ist einfach und clever – Medorator