2012-04-02 20 views
5

Pracuję nad podstawowym wyszukiwaniem mojego bloga, a podstawowa funkcjonalność działa. Zastanawiam się jednak, czy możesz zwrócić zmienne kontekstowe w odpowiedzi ajaxowej, do której następnie można uzyskać dostęp w szablonie. Oto moja funkcja wyszukiwania:Zmienne kontekstowe Django i odpowiedź ajax

from django.http import HttpResponse 
from django.db.models import Q 
from django.core import serializers 

def search(request): 
    if request.is_ajax(): 
     query = request.POST['query'] 
     text_list = Text.objects.filter(Q(title__icontains=query) | Q(mytextfield__icontains=query)) 
     data = serializers.serialize("json", text_list) 
    else: 
     data = "whoops" 
    return HttpResponse(data,'application/javascript') 

Jest to wymagane przez jquery.

$(document).ready(function() { 
    $('#search').submit(function(){ 
     $.post("/search/search/", $("#search").serialize(), function(data){ 
      // Search results for: **query** 
      $.each(data, function(index){ 
       $(ajax).append(data[index].fields.title + "<br>"); 
      }); 
     }, "json"); 
     return false 
    }); 
}); 

Co ja chce zrobić, to przekazać zapytania zmienną, zawartych w def wyszukiwania, z powrotem do mojej funkcji jQuery. W regularnej odpowiedzi HTTP używałbyś zmiennych kontekstowych ... ale nie jestem pewien, w jaki sposób można je przekazać za pomocą jQuery.

Odpowiedz

3

Co można zrobić, to przekazać słownik z powrotem do HttpResponse, zamiast tylko wyników.

data = { 
    'query': request.POST['query'], 
    'results': serializers.serialize("json", Text.objects.filter(Q(title__icontains=query) | Q(mytextfield__icontains=query))) 
} 

return HttpResponse(json.dumps(data), 'application/javascript') 

Należy zaimportować json lub simplejson.

+0

Wygląda obiecująco Jordan. Spróbuję, kiedy wrócę do domu. – bento