2013-04-19 13 views
9

Używam ajax do sortowania danych, które pochodziły z wyników wyszukiwania.jak renderować tylko część html z danymi za pomocą django

Teraz zastanawiam się, czy jest możliwe, aby uczynić tylko pewną część html tak, że można ładować w ten sposób:

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

robię tego, ale jestem coraz całą stronę HTML w odpowiedzi i dołącza całą stronę html do istniejącej strony, która jest okropna.

to moja 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)) 

jak mogę uczynić tylko że <div id="result"> </div> z mojej funkcji widoku? albo co ja tu robię źle?

Odpowiedz

15

Z tego, co rozumiem, chcesz traktować ten sam widok w inny sposób, jeśli otrzymasz żądanie ajax. Sugerowałbym podzielenie Twojego result-page.html na dwa szablony, jeden zawierający tylko żądany element div, i zawierający wszystko inne i zawierający drugi szablon (patrz django's include tag).

Państwa zdaniem wtedy można zrobić coś jak następuje:

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

Wyniki-page.html:

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

częściowego results.html:

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

jesteś geniusz. wielkie dzięki – doniyor

+0

To proste i sprytne – Medorator

Powiązane problemy