jinja2 - 为什么 Jinja 不接受我的 JS String 变量是什么?
问题描述
我有一个 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 连接的字符串。它位于一个名为 data 的静态文件夹中。
如果我 console.log 我传递给函数的这个字符串,Jinja 会将我的 JS 变量变成奇怪的东西,看起来像:
/static/data/Streamchart/%20%7B%25%20chosen_data%20%25%7D%20.csv
为什么使用 Jinja 时“ice-cream_sales”会变成“%20%7B%25%20chosen_data%20%25%7D%20”,我该如何预防?
蒂亚。
解决方案
您不能{% 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')}}";
推荐阅读
- c# - 在 TDD 中使用调解器 cqrs 进行集成测试 .net core 3
- typescript - 推断通用的“this”类型
- javascript - 为什么此代码返回未定义以及如何使此代码工作
- json - 评估表达式 json 结果在调试模式下与最终 json 结果不同
- python - PyTesseract 导致 PIL 引发 ValueError: tile cannot extend outside image
- javascript - 根据长度递归地将元素添加到数组中
- c# - 唱歌时如何将 UserID 存储在班级中?
- bash - Bash:make:即使在安装 msys-make 软件包后也找不到命令
- c# - 实体映射:将两个属性引用到外键时出现问题
- javascript - 如何将列表显示为 lg 屏幕的 3 列和 sm 屏幕的 1 列