Подтвердить что ты не робот

Отправка данных как объекта JSON из Python в Javascript с Jinja

Я пытаюсь отправить lat/long point как объект JSON из Python в javascript. Я использую Flask, поэтому следующее Jinja templating..

Python:

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

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

Я использую eval, потому что стандартная запись Jinja переменной = {{data}} не работает, и я нашел несколько советов, которые необходимы для eval. Любые советы?

4b9b3361

Ответ 1

Документация Flask Jinja2 достаточно хорошо описывает это. Первый пример в разделе "Стандартные фильтры" показывает, как встроить JSON-объект из python в Javascript script:

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

Итак, в этом случае:

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

tojson вызывает dumps данные, поэтому вы должны передавать данные непосредственно в шаблон, а не называть dumps на нем, иначе вы дважды сериализуете данные и в итоге получаете строку JSON.