Почему Джинджа не принимает мою переменную JS String такой, какая она есть? - PullRequest
0 голосов
/ 01 мая 2020

У меня есть функция JavaScript для создания диаграммы, я должен динамически передавать в нее источник данных. Моим примером для этого вопроса является «ice-cream_sales». Источником данных является строковая переменная.

var chosen_data = "ice-cream_sales";

function makeChart(chosen_data){
     var data_source = "{{ url_for('static', filename='data/ {% chosen_data %} .csv')}}";

     d3.select("svg").remove();
     var x = d3.time.scale().range([0, width]);
     ...
}

makeChart(chosen_data, "blue", 900, 400); // Make the chart

Итак, selected_data - это строка, которую нужно объединить с .csv. Он находится в папке stati c с именем data.

Если я утешаю эту строку, которую я передаю в функцию, console.log, Джинджа превращает мою переменную JS в нечто странное, похожее на:

/static/data/Streamchart/%20%7B%25%20chosen_data%20%25%7D%20.csv

Почему "ice-cream_sales" становится "% 20% 7B% 25% 20chosen_data% 20% 25% 7D% 20" с Jinja, и как я могу предотвратить это?

TYIA.

1 Ответ

0 голосов
/ 01 мая 2020

Вы не можете поместить выражение типа {% chosen_data %} в выражение {{ }}, потому что jinja анализирует его как простую строку, которая затем экранируется, как вы видели. Более того, chosen_data - это переменная javascript, а не jinja.

Фактическое использование разделителей Jinja можно найти здесь, в документации . Если вам нужно установить имя ваших данных из javascript, вы можете использовать простую замену:

var data_source = "{{ url_for('static', filename='data/chosen_data.csv')}}";
var data_source = data_source.replace("chosen_data", chosen_data);

В противном случае было бы более элегантно, если вы установите переменную в Jinja следующим образом:

{% set chosen_data = "ice_cream_sales" %}
...
var data_souce = "{{ url_for('static', filename='data/' ~ chosen_data ~ '.csv')}}";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...