Skip to content Skip to sidebar Skip to footer

Django: Passing Json From View To Template

In views.py, I have time series data stored in a dictionary as follows: time_series = {'timestamp1': occurrences, 'timestamp2': occurrences} where each timestamp is in unix time a

Solution 1:

If a frontend library needs a to parse JSON, you can use the json library to convert a python dict to a JSON valid string. Use the escapejs filter

import json

def foo(request):
    json_string = json.dumps(<time_series>)
    render(request, "foo.html", {'time_series_json_string': json_string})


<script>var jsonObject = JSON.parse('{{ time_series_json_string | escapejs }}');
</script>

Solution 2:

Pass a json.dumps value to the template. It is already a valid JSON string so you don't need to parse it or anything. Only when rendering it in the template, mark it as safe to prevent HTML quoting.

# views.pydef foo(request):
    time_series_json = json.dumps(time_series)
    return render(request, 
                  "template.html", 
                  context={'time_series': time_series_json})

# in the template
<script>
    const timeSeries = {{ time_series | safe }};
</script>

Solution 3:

have you tried passing something like json.dumps(time_series) to the render function?

Solution 4:

Using the Django templates built-in filter json_script:

In views.py:

render(request, "foo.html", {'time_series_data': time_series})

In the template foo.html:

{{ time_series_data|json_script:"time-series-data" }}

In your script:

const timeSeriesData = JSON.parse(document.getElementById('time-series-data').textContent);

Post a Comment for "Django: Passing Json From View To Template"