Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python瓶子:将Python变量分配给Javascript变量_Javascript_Python_Templates_Bottle - Fatal编程技术网

Python瓶子:将Python变量分配给Javascript变量

Python瓶子:将Python变量分配给Javascript变量,javascript,python,templates,bottle,Javascript,Python,Templates,Bottle,我正在使用web框架呈现网页。我使用瓶子模板引擎从Python中传递变量,然后在嵌入Python代码的模板文件中相应地处理它们 现在,当我在模板中使用javascript时,问题来了。如果我试图访问javascript函数中的Python变量,它将失败,并出现TypeError:unhabable type:'list' 我正在python文件中调用我的模板: list_vals = [['Mushrooms', 3, 5], ['Onions', 1, 4], ['Olives', 1, 5]

我正在使用web框架呈现网页。我使用瓶子模板引擎从Python中传递变量,然后在嵌入Python代码的模板文件中相应地处理它们

现在,当我在模板中使用
javascript
时,问题来了。如果我试图访问
javascript
函数中的Python变量,它将失败,并出现
TypeError:unhabable type:'list'

我正在python文件中调用我的模板:

list_vals = [['Mushrooms', 3, 5], ['Onions', 1, 4], ['Olives', 1, 5], ['Zucchini', 1, 2]]    
return bottle.template(os.path.join(os.path.dirname(__file__), 'templates', 'pizzaStats.html'), vals=list_vals)
在我的模板文件中,我正在使用
vals
变量当前仅在javascript内部打印,如下所示(仅显示模板的脚本部分):


//加载可视化API和piechart包。
load('visualization','1.0',{'packages':['corechart']});
//将回调设置为在加载Google Visualization API时运行。
setOnLoadCallback(drawChart);
//创建并填充数据表的回调,
//实例化饼图,传入数据并
//画它。
函数绘图图(){
//创建数据表。
var data=new google.visualization.DataTable();
%打印({vals}})
var graphdata={{vals}};
data.addColumn('string','Topping');
data.addColumn('number','Slices');
data.addColumn('number','pieces');
data.addRows(graphdata);
//设置图表选项
//要使线条平滑—“curveType”:“function”
var options={'title':'我昨晚吃了多少比萨饼',
“宽度”:400,
‘高度’:300};
//实例化并绘制图表,传入一些选项。
var chart=new google.visualization.LineChart(document.getElementById('chart_div'));
图表绘制(数据、选项);
}
即使我将变量的类型从
list
更改为
dict
类型,它仍然会抱怨
TypeError:unhable type:'dict'
错误来自
print()
但如果我删除
print()
则不会发生任何事情,也不会绘制任何图形,这意味着变量分配不正确


最终目标是将此变量分配给javascript变量,然后该变量将使用Google API绘制图形。将Python变量分配给瓶子模板内的javascript变量的正确方法是什么?谢谢。

我认为问题出在模板方面,当您呈现
vals
参数时。呈现的
vals
必须是有效的JavaScript代码。默认情况下,瓶子自动转义HTML特殊字符,即其中的单引号和双引号。因此,当您将Python
list\u vals
list传递给
template
函数时,它的计算结果如下所示:

"[['Mushrooms', 3, 5], ['Onions', 1, 4], ['Olives', 1, 5], ['Zucchini', 1, 2]]"
[['Mushrooms', 3, 5], ['Onions', 1, 4], ['Olives', 1, 5], ['Zucchini', 1, 2]]
然后用瓶子自动逃走,后记如下:

"[['Mushrooms', 3, 5], ['Onions', 1, 4], ['Olives', 1, 5], ['Zucchini', 1, 2]]"
[['Mushrooms', 3, 5], ['Onions', 1, 4], ['Olives', 1, 5], ['Zucchini', 1, 2]]
生成无效的JavaScript代码

快速解决方案可能只是在模板
vals
参数中添加一个感叹号:

var graphdata = {{!vals}};

如果发送列表的字符串表示,会发生什么?比如:return瓶子.template(os.path.join(os.path.dirname(文件),'templates','pizzaStats.html'),vals=str(list\u vals))@Rob然后我得到
TypeError:unhable类型:“set”
是的,你是对的。我被困在
print()
上,不知道为什么会出现这个错误。谢谢