2012-03-10 3 views
0

장고를 할 일 목록을 만들고 있습니다. 확인란 완료로 아약스가 작업 표시 :장고 아약스 함수에서 여러 변수를 반환

//Checkbox toggles 
$('input:checkbox').click(function() { 
    if ($(this).attr('checked')) { 
     $action = true; 
    } else { 
     $action = false; 
    } 

    $.ajax({ 
     type: "POST", 
     url: "/gtd/action/" + this.id.split("_")[1] + "/" + $(this).val() + "/" + $action + "/", 
     success: function(data) { 
      //Update entire gtd side menu 
     } 
    }) 
}); 

아약스의 성공 부분을, 나는 (불완전 작업의 수에 관한) 사이드 메뉴에 여러 변수를 업데이트해야합니다. 장고보기 변수를 계산할 수 있습니다

def ajax_click(request, modelname, id, type, toggle): 

    #Do some stuff to save the object 

    action_count = actions = Action.objects.filter(complete=False, onhold=False).count() 
    hold_count = Action.objects.filter(onhold=True, hold_criteria__isnull=False).count() 

    return HttpResponse('') 

질문은, 어떻게 다시 하나 이상의 변수를 아약스 함수에 전달합니까? 이 예에서는 action_count 및 hold_count가 있습니다. 어떻게 이러한 변수를 성공 함수로 되돌릴 수 있습니까?

+0

엄격히 관련이 없지만 [Backbone.js] (http://documentcloud.github.com/backbone/)에는 서버와 서버 간의 응답을 처리하는 데 도움이되는 많은 것들이 있습니다 ([models] (http : /documentcloud.github.com/backbone/#Model), 또한 [TODO 데모] (http://documentcloud.github.com/backbone/examples/todos/index.html)를 참조하십시오. –

+0

고마워, 내가 살펴볼 게! –

답변

2

가장 간단한 해결책은보기에서 일부 JSON을 반환하는 것입니다. 다음과 같은 내용 :

import json 
data = json.dumps({ 
     'actions': action_count, 
     'holds': hold_count, 
    }) 
return HttpResponse(data, content_type='application/json') 

클라이언트 측 코드는 필요한 정보를 추출 할 수 있습니다. jQuery를 사용하는 것의 모습으로 인해 $.ajax() 호출에 전달 된 객체에 dataType: "json"을 설정하여 JSON을 파싱하여 자동으로 성공 함수에 전달할 수 있기 때문입니다.

+0

감사합니다. 장고에서 AttributeError가 발생했습니다. 'str'객체에는 '_meta'속성이 없습니다. 이것은 serialize 할 때 C : \ Python27 \ lib \ site-packages \ django-1.3.1-py2.7.egg \ django \ core \ serializers \ base.py에서 오는 것 같습니다 - obj._meta.local_fields의 필드 : –

+0

[serialize] (https://docs.djangoproject.com/en/dev/topics/serialization/) 때문에 쿼리 세트를 직렬화 할 수만 있습니다. 'import json'을 사용하고 나서'json.dumps ({ 'key': value})'를 사용하십시오. –

+0

가. 공상에 시달리고 나와 직접 사용한 적이없는 것을 사용하기에 적합합니다. -/ –