web-dev-qa-db-fra.com

envoi de données en tant qu'objet JSON depuis Python vers Javascript avec Jinja

J'essaie d'envoyer un point lat/long en tant qu'objet JSON de Python vers un javascript. J'utilise Flask donc ce qui suit est un modèle Jinja ..

Python:

@app.route('/')
def homepage():
    lat_lng = (39.7392,-104.9847) 
    return render_template("index_v2.html", lat_lng=json.dumps(lat_lng))

html avec js:

<script type='text/javascript'>
    var map;
    function initialize() {
      // Create the map.
      var lat_lng = eval('({{ lat_lng }})')
      map = new google.maps.Map(document.getElementById('map-canvas'), {
        zoom: 8,
        center: new google.maps.LatLng(lat_lng)
      });

    }

    google.maps.event.addDomListener(window, 'load', initialize);
  </script>

J'utilise l'eval parce que la notation Jinja standard de variable = {{data}} ne fonctionne pas et j'ai trouvé quelques conseils que l'eval était nécessaire. Aucun conseil?

21
tesslins

La Flask documentation Jinja2 couvre assez bien cela. Le premier exemple sous la section "Filtres standard" montre exactement comment incorporer un objet JSON à partir de python dans un script Javascript:

<script type=text/javascript>
    doSomethingWith({{ user.username|tojson|safe }});
</script>

Donc dans ce cas:

var lat_lng = {{ lat_lng|tojson|safe }};

tojson appelle dumps sur les données, vous devez donc passer les données directement au modèle plutôt que d'appeler dumps dessus, sinon vous double-sérialisez les données et vous retrouvez avec une chaîne JSON.

32
Dennis L