在JavaScript中使用Pylons全局变量(转义括号)
我正在尝试在JavaScript中访问一个存储在Python全局变量中的字典的结果。
var selected = jQuery('.target option:selected').text()
var list = "${c.persons_by_permission["+selected+"]}"
如果我直接访问这个字典,而不使用变量:
var list = "${c.persons_by_permission['stringID']}"
那么代码就能正常工作。
但是,当我尝试使用变量来访问字典时,我遇到了语法错误(我觉得是因为大括号的问题)。
我尝试用以下方式来处理大括号:
var list = "${{c.persons_by_permission["+selected+"]}}"
但这样反而出现了更多的语法错误。
有没有什么好的建议呢?
补充说明:
这并不是我能否将Python和JavaScript一起使用的问题,而是关于如何处理大括号的问题。
我在使用pylons,所以如果我尝试:
alert("${c.persons_by_permission['Documents']}")
我就能得到我需要的结果。问题是我找不到一种方法将变量传递到JavaScript中来替代'Documents'。
2 个回答
0
我不知道你用的是什么执行环境,但我几乎可以肯定,Python和JavaScript不会同时执行。
${c.persons_by_permission['stringID']}
看起来像是一种模板指令。如果是这样的话,它之所以能工作,是因为这个指令是在模板处理的时候被处理的。而你提到的另一种形式,只是在JavaScript中计算的一个表达式,最后得到的是一个字符串。
3
我在这里做了一些(合理的)假设……
- 你的Python代码是在服务器上运行的
- 你的JavaScript代码是在客户端(用户的浏览器)运行的
对于Python来说,它只是在输出文本。它并不关心浏览器会把这些文本当成HTML、JavaScript还是其他什么。它只是生成一些文本,然后把这些文本发送给浏览器。
通过HTTP协议,你可以发送请求并接收响应。你不能在响应还没结束的时候就停下来,从客户端获取数据。
你不能把客户端的JavaScript数据传回生成这些JavaScript的Python进程。那个进程早就结束了。
你可以选择:
- 一开始就把所有数据发送给客户端(然后在JavaScript中选择你需要的部分,而不是在Python中选择)
- 让JavaScript发起一个新的HTTP请求到服务器,并在JavaScript中处理响应(这叫做Ajax,网上有很多教程可以学习)