web-dev-qa-db-ja.com

PythonからJinjaを使用してJavascriptにJSONオブジェクトとしてデータを送信する

緯度/経度のポイントをJSONオブジェクトとしてPythonからJavaScriptに送信しようとしています。Flaskを使用しているため、以下はJinjaテンプレートです。 ..

Python:

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

js付きのhtml:

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

変数= {{data}}の標準のJinja表記が機能せず、evalが必要であるというアドバイスを見つけたので、evalを使用しています。何かアドバイス?

21
tesslins

Flask Jinja2ドキュメント はこれをかなりカバーしています。「標準フィルター」セクションの最初の例は、pythonをJavaScriptスクリプトに:

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

したがって、この場合:

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

tojsonはデータに対してdumpsを呼び出すため、dumpsを呼び出すのではなく、テンプレートに直接データを渡す必要があります。そうしないと、データを二重シリアル化して、 JSON文字列。

32
Dennis L