2016-01-14 55 views
0

我有下面的代碼發送ID到我的Django視圖,並從服務器獲取幾個JSON對象,這是工作,但我不能在模板中使用響應對象,即JSON對象,但只有一個對象與上下文名稱只在我的http服務成功功能。如何在django視圖中使用HttpResponse時訪問模板中的json對象?

這裏是視圖代碼 -

def preview(request): 
    if request.method == "POST": 
     response_data = {} 
     try: 
      data=json.loads(request.body.decode()) 
      v_pid=data["id"] 
      basic_v_obj = tsbasicinfo.objects.get(emailid = request.session.get('emailid')) 
      if tswex.objects.filter(pid = v_pid).exists(): 
       wc_v_obj = tswex.objects.filter(pid=v_pid) 
       wc_v_qs = tswex.objects.filter(pid=v_pid) 
       wc_v_json_list = [obj.as_dict() for obj in wc_v_qs] 
      else: 
       wc_v_obj ='' 
       wc_v_json_list='' 
      context = { 
       'js': basic_v_obj, 
       'jjs':wc_v_obj, 
      } 
      context['wc_V_json'] = mark_safe(json.dumps(wc_v_json_list, ensure_ascii=False)) 
     except: 
      context = {'status': "nodata"} 
    return HttpResponse(context, content_type="application/json") 

下面是使用AngularJS HTTP服務功能:

 $scope.preview_ang = function (clicked_id) { 
      $http({ 
       method: 'POST', 
       url: 'pvcan', 
       data: { 
        'id': clicked_id 
       }, 
       headers: { 'Content-Type': 'application/x-www-form-urlencoded' } 
       }) 
       .success(function (data) { 
       if (data == "null") { 
        alert('server returned nothing but success'); 
       } else { 
        alert(JSON.stringify(data,null,2)); 
        jdata = data['wc_V_json'];  
        alert('First Sk: '+JSON.stringify(jdata)); // displays unknown.. as data is just a string object containing context names :(
        } 
       }) 
       .error(function (data, status, headers, config) { 
          alert('server returned error :'+status); 
       }) 
     } 

當我把斷點視圖在返回HttpResponse對象,我可以看到具有期望的數據的對象,但是我不確定如何在javascript內部模板中使用它。

當我使用的方法選擇render_to_response,我可以使用響應上下文例如下面 -

jdata_wc = {{ wc_V_json|safe }}; 

我如何用同樣的方法在我的模板,當我回到使用HttpResponse對象視圖中的數據?

回答

1

首先,Django代碼存在一些問題。沒有涉及的模板,因此調用某些「上下文」或使用mark_safe是沒有意義的。你也只能將你的變量的一些轉換爲JSON。您需要整塊數據的治療爲一體,並將其轉換成JSON一氣呵成:

data = { 
    'jobseekers': basic_v_obj, 
    'jobseekers_wc': wc_v_obj, 
    'wc_V_json': wc_v_json_list 
} 
return HttpResponse(json.dumps(data), content_type="application/json") 

然後,還有在客戶端的問題。 JSON.stringify用於將JS數據轉換爲JSON,而不是其他方式。你需要JSON.parse。 而您正試圖訪問原始JSON數據,就像它是一個JS對象,然後再進行轉換。

success(function (data) { 
    if (data == "null") { 
     alert('server returned nothing but success'); 
    } else { 
     data = JSON.parse(data); 
     jdata = data['wc_V_json'];  
     alert('First Sk: ' + JSON.stringify(jdata)); 
    } 
}); 
+0

非常感謝Daniel! – Sathish

相關問題