Passing JSON to JS using Django Rendering

In my views.py file, I have the following dictionary:

data = {'pk': '1980.24', 'model': 'artworks.metaData', 'fields': {'medium': 'Oil on canvas ', 'description': 'missing', 'credit': 'Gift of Nicholas Wyeth, 1980 ', 'collection': 2, 'height': '21.7', 'culture': 'Missing value', 'depictedPeople': 'missing', 'creation_date': '1896 ', 'account': 'n/a', 'original_url': 'http://www.metmuseum.org/art/collection/search/10738?sortBy=Relevance&what=Canvas%7cOil+paintings&ao=on&ft=*&offset=0&rpp=100&pos=1', 'url': 'annotatie01.io.tudelft.nl/collections/Metropolitan/1980.24.jpg', 'title': 'Gooseberries ', 'object_number': '1980.24', 'width': '35.7', 'artist': 'Joseph Decker '}}

I would like to be able to use / access this dictionary on my web page.

My attempts:

I tried to send data using a render in my views.py,

def foo():
    context = {'data':data}
    return render(request, 'index.html', context=context)

to access it using:

<script type="text/javascript">
    var received_data  = "{{data}}";
</script>

Using this, data is transmitted, but they are distorted:

"{&#39;pk&#39;: &#39;1980.24&#39;, &#39;model&#39;: &#39;artworks.metaData&#39;, &#39;fields&#39;: {&#39;medium&#39;: &#39;Oil on canvas &#39;, &#39;descripti...etc

I tried using json.dumps(data)and JSON.parse(received_data )but this caused an error:

 Uncaught SyntaxError: Unexpected token & in JSON at position 1.

In short :

How can I send JSON data from Py to JS using Django Render ()?

+6
source share
2 answers

The easiest way would be

<script type="text/javascript">
    var received_data  = "{{ data|safe }}";
</script>
+9
source

, dict django 1.5+ do:

import json

def foo():
    js_data = json.dumps(data)
    render_template_to_response("imageView/index.html", {"data": js_data})

imageView/index.html :

<script type="text/javascript">
    var received_data = "{{data|safe}}";
    console.log(received_data);
</script>

Else do:

from django.utils import simplejson

def foo():
    js_data = simplejson.dumps(data)
    render_template_to_response("imageView/index.html", {"data": js_data})

imageView/index.html :

<script type="text/javascript">
    var received_data = "{{data}}";
    console.log(received_data);
</script>
+2

Source: https://habr.com/ru/post/1680405/


All Articles