Проблемы с обработкой Python словарей в шаблонах Javascript flask - PullRequest
0 голосов
/ 04 августа 2020

Итак, я создаю веб-приложение, использующее flask, которое может отслеживать несколько транспортных средств и предоставлять обновления. Сценарий python помогает собрать все данные и поместить их в словарь.

Я отправляю этот словарь в индекс. html с кодом javascript в HTML, который инициализирует map и размещает маркеры на основе координат, полученных от python.

Проблема, с которой я столкнулся, заключается в том, что этот словарь неправильно анализируется в js, и в результате я не получаю данных.

Прямо сейчас у меня есть заполнитель {{truck_dict}} для хранения объекта dict из python в html.

PS. Я не лучший в JS, так что не судите XD

#Python Code
return render_template('pages/index.html', trucks = truck.driver_locator(truck.locations()))
#Even when I jsonify/json.dump the variable in the trucks object, nothing happens
#JS Code
var truck_dict = {{trucks | tojson}}
var i;
for (var key in truck_dict){
var value = truck_dict[key];
var geojson = {
      type: 'FeatureCollection',
      features: [{
            type: 'Feature',
            geometry: {
            type: 'Point',
            coordinates: value
         },
            properties: {
                  title: 'Mapbox',
                  description: '1303'
                  }
               }]
         };

ВЫВОД ОБРАЗЦА python сгенерированного dict

{'1301': [43.1220307, -78.9352247], '1302': [42.3107737, -77.2519131], '1304': [40.3809016, -74.5665863], '1305': [40.2453049, -74.5707928], '1303': [39.6435448, -75.9325289]}

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Вот результат:

var truck_dict = {'1301': [43.1220307, -78.9352247], '1302': [42.3107737, -77.2519131], '1304': [40.3809016, -74.5665863], '1305': [40.2453049, -74.5707928], '1303': [39.6435448, -75.9325289]};

for (var i in truck_dict) {
  console.log(i, truck_dict[i]);
}

вывод:

1301 [43.1220307, -78.9352247]
1302 [42.3107737, -77.2519131]
1303 [39.6435448, -75.9325289]
1304 [40.3809016, -74.5665863]
1305 [40.2453049, -74.5707928]

Итак, вам нужно зарегистрировать truck_dict, например:

var truck_dict = {{trucks | tojson}};

console.log(trucks);
console.log(truck_dict);
0 голосов
/ 04 августа 2020

Вы пытаетесь проиндексировать словарь. Использование truck_dict[I] здесь не работает, потому что ваши индексы не являются числами (в любом случае невозможно в js).

Вам нужно получить доступ к элементам словаря с помощью их ключи (например, truck_dict['1301'] или truck_dict.1301) НЕ индексы. Если вы хотите перебрать каждый ключ (который можно использовать для ссылки на значение, сопоставленное с этим ключом), используйте:

for(var key in truck_dict) {
  var value = truck_dict[key];
  // do what you need with value and key here
}
...