web-dev-qa-db-fra.com

Django: passer du JSON de la vue au modèle

Dans views.py, les données de séries chronologiques stockées dans un dictionnaire sont les suivantes:

time_series = {"timestamp1": occurrences, "timestamp2": occurrences}

où chaque timestamp est en heure unix et occurrences est un entier.

Existe-t-il un moyen de transmettre les données de série temporelle sous forme d'objet json dans le contexte de la fonction render?

Pourquoi faire ceci: J'utilise Cal-heatmap sur le frontal qui nécessite que les données soient au format json. Les requêtes Ajax fonctionnent parfaitement pour l'instant, mais je souhaiterais idéalement utiliser l'approche render si possible.

8
jkarimi

Si une bibliothèque frontale nécessite un analyseur JSON, vous pouvez utiliser la bibliothèque json pour convertir un dict python en une chaîne valide JSON. Utilisez le filtre escapejs

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>
25

avez-vous essayé de passer quelque chose comme json.dumps(time_series) à la fonction de rendu?

2
Romeo Mihalcea

Passez une valeur json.dumps au modèle. C'est déjà une chaîne JSON valide, vous n'avez donc pas besoin de l'analyser ou quoi que ce soit. Ne le marquez que lorsque vous le rendez dans le modèle, comme suit: safe pour éviter les citations HTML.

# views.py
def 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>
1
Milan Cermak