2014-07-13 12 views
13

Sto provando a inviare un punto lat/long come oggetto JSON da Python a un javascript. Sto utilizzando Flask modo seguente è Jinja template ..invio di dati come oggetto JSON da Python a Javascript con 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 con 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> 

Sto utilizzando l'eval perché la notazione standard Jinja delle variabili = {{data}} non funziona e ho trovato qualche consiglio sul fatto che la valutazione fosse necessaria. Qualche consiglio?

+0

Cosa succede se si esce eval e si stampa la variabile lat_lng con, console.log (lat_lng) ??? –

risposta

16

The Flask Jinja2 documentation copre abbastanza bene. Il primo esempio nella sezione "Filtri di serie" mostra esattamente come incorporare un oggetto JSON in pitone in uno script JavaScript:

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

Quindi in questo caso:

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

tojson chiamate dumps sui dati , quindi è necessario passare i dati direttamente al modello piuttosto che chiamare dumps su di esso, altrimenti si esegue la serializzazione doppia dei dati e si finisce con una stringa JSON.

+0

Sì, leggi la stessa documentazione di Flask, ho provato esattamente la sintassi e ho ottenuto l'errore della console "lat_lng non è definito". Anche la linea presenta un errore di sintassi di "id di proprietà non valido" nel mio IDE esattamente alla colonna della prima parentesi graffa. Sto eseguendo Python 2.7 e Flask 0.10.1 – tesslins

+0

E sei sicuro che stai passando a lat_lng come parametro template? –

+0

Ho deciso di andare con AJAX e jquery invece di scherzare. Grazie! – tesslins