Pasando datos JSON al front-end usando Django

¿Hay alguna forma de pasar objetos JSON al extremo frontal de una plantilla web si se utiliza el marco de Django o Python en general?

Por ejemplo, si quiero enviar un objeto que tiene dos arreglos como propiedades (digamos xvalues y yvalues ), ¿cómo podría usar JavaScript o jQuery para hacer una llamada Ajax para obtener el objeto que tiene las propiedades?

Como respuesta complementaria a zeekay, si desea enviar solo un objeto, puede hacer un volcado json, por ejemplo:

 import json def my_ajax_view(request): if not request.is_ajax(): raise Http404 data_dict = getmydata() #lets supose is a dict return HttpResponse(json.dumps(data_dict)) 

De esa manera, recibirás esos datos a través de tu éxito ajax y harás lo que quieras con ellos.

También puede enviar a través de listas, cuando recibe su respuesta a veces tendrá que hacer un JSON.parse en los datos (a veces porque cuando envía un diccionario, creo que no es necesario)

Claro, simplemente configure una vista que devuelva JSON y realice una solicitud. Aquí hay un ejemplo simple:

 import json from django.http import HttpResponse from django.template import Template, Context def ajax(request): """returns json response""" return HttpResponse(json.dumps({'foo': 'bar'}), mimetype='application/json') def index(request): """simple index page which uses jquery to make a single get request to /ajax, alerting the value of foo""" t = Template("""      """) return HttpResponse(t.render(Context())) # urlconf urlpatterns = patterns('', (r'^$', index), (r'^ajax/', ajax), ) 

Si te comprendo correctamente, quieres representar un poco de JSON en tu salida HTML.

Para hacer esto, pase el objeto codificado en json de la vista a la plantilla:

views.py :

 import json def myview(request): obj = {"a": 1, "b": 2} return render_to_response("template.html", {"obj_as_json": json.dumps(obj)}) 

template.html :

     ...  

Se renderizará como:

 ...  

Tenga en cuenta que json.dumps solo funciona con diccionarios que contienen tipos de datos simples. Django tiene soporte para serializar objetos de modelo a json, usando:

 from django.core import serializers obj_as_json = serializers.serialize("json", my_model_object) 

Desafortunadamente, las respuestas actuales están un poco desactualizadas, aquí se explica cómo hacerlo con las versiones más recientes de Django (incluido Django> 2.0 ):

Use JsonResponse , una subclase de HttpResponse , para esto:

 # views.py from django.http import JsonResponse def get_coords(request): """returns json response""" json_data = {'xval': 10, 'yval': 10} return JsonResponse(json_data) 

Asume un dict como parámetro, pero puede pasar cualquier JSON-serializable, en principio. Le desalentaría que lo hiciera, pero si pasa un objeto que no es un dict , debe configurar el parámetro safe=False .

La petición ajax podría verse algo como:

 # index.html ...  ...   ... 

Con la correspondiente urlconfig:

 # urls.py urlpatterns = [ path('ajax_coords/', views.get_coords, name='ajax_get_coords'), ...