2013-04-19 6 views
9

Sto usando ajax per ordinare i dati che provengono dai risultati di ricerca.come rendere solo parte di html con dati usando django

Ora mi chiedo se sia possibile rendere solo una parte di HTML in modo che io possa caricare in questo modo:

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

sto facendo questo, ma sto ottenendo l'intera pagina html come risposta e aggiunge l'intera pagina html alla pagina esistente che è terribile.

questo è il mio 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)) 

come posso soltanto che <div id="result"> </div> dalla mia funzione di visualizzazione di rendering? o cosa sto facendo qui storto?

risposta

15

Da quello che ho capito, si vuole trattare la stessa vista in modo diverso se si riceve una richiesta Ajax. Suggerisco di suddividere lo result-page.html in due modelli, uno che contenga solo il div desiderato e uno che contenga tutto il resto e che includa l'altro modello (vedere django's include tag).

Secondo lei allora si può fare qualcosa di simile al seguente:

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

risultati-page.html:

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

parziale results.html:

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

sei genio. grazie mille – doniyor

+0

Questo è semplice e intelligente – Medorator