Ваш процесс состоит из нескольких шагов:
- Извлечение данных из хранилища данных (обычно это база данных, но в данном случае CSV)
- Поместите эти данные вшаблон
- Синтаксический анализ данных в JS
- Plotly
Шаг 1 великолепен, но на шаге 2 у вас немного странная методология. Обычно это называется сериализацией;Я бы настоятельно рекомендовал не использовать скрытые данные такими, какие вы есть. Ваша цель - перевести ваш массив данных Pandas в переменную JS, это проще, чем вы думаете.
Вы можете устранить скрытые входные данные, изменив свой javascript следующим образом:
var trace1 = {
x: {{dates|safe}},
y: {{values|safe}},
type: 'scatter',
};
var data = [trace1];
Plotly.newPlot('myDiv', data, {}, {showSendToCloud: true});
Поскольку вы можете думать о шаблоне Django просто как о копировании / вставке: он будет вставлять ваши данные куда угодноВы помещаете этот тег, будь то в части HTML или части JS.
Для дальнейшего использования у Pandas есть метод сериализации под названием df.to_json()
, который построен для этого перевода и имеет встроенные опции для управления форматированием даты и прочим. Это лучший инструмент для использования, но он не является технически необходимым здесь. Документы: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_json.html
На третьем шаге плотно ожидаются объекты JS Date, и вы даете ему строки - вам необходимо сначала проанализировать их с помощью Date.parse ()
Один из способов сделать это - сопоставить функцию Date.parse () с массивом строк даты, например:
unparsedDates = {{dates|safe}}
parsedDates = unparsedDates.map(dateString => new Date(dateString) )
var trace1 = {
x: parsedDates,
y: {{values|safe}},
type: 'scatter',
};
var data = [trace1];
Plotly.newPlot('myDiv', data, {}, {showSendToCloud: true})