with setup node integrating funciona example ejemplo cómo bootstrap basico and angularjs django django-templates

angularjs - setup - node js angular bootstrap



¿Cómo acceder a los objetos json en la plantilla cuando se usa HttpResponse en django view? (1)

En primer lugar, hay algunos problemas con su código Django. No hay ninguna plantilla involucrada, por lo que no tiene sentido llamar a algo "contexto", o usar mark_safe . Además, solo convierte algunas de sus variables a JSON. Necesita tratar toda la información como una y convertirla a JSON de una sola vez:

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

Entonces, hay problemas en el lado del cliente. JSON.stringify es para convertir datos JS a JSON, y no al revés. Necesitas JSON.parse . Y está intentando acceder a los datos JSON sin procesar como si se tratara de un objeto JS, antes de convertirlo.

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

Tengo un código a continuación que envía id a mi vista django y obtiene un par de objetos json del servidor, esto funciona, pero no pude usar los objetos de respuesta en la plantilla, es decir, objetos json pero solo un objeto con los nombres de contexto solo en mi función de éxito del servicio http.

Aquí está el código de vista -

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

Aquí está la función del servicio http usando AngularJS:

$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); }) }

Cuando guardo un punto de interrupción en la vista mientras devuelvo HttpResponse, puedo ver los objetos con los datos que estoy esperando, sin embargo, no estoy seguro de cómo usarlos en la plantilla de javascript dentro.

Cuando uso el método render_to_response, podría usar el contexto de respuesta como el siguiente, por ejemplo -

jdata_wc = {{ wc_V_json|safe }};

¿Cómo puedo usar el mismo método en mi plantilla cuando devuelvo los datos usando HttpResponse desde la vista?