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?
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.