web2py:如何将python数组复制到javascript文件中

Jam*_*mes 3 javascript python arrays communication web2py

我目前在使用javascript和python在web2py中进行通信时遇到问题.

控制器:

def testDB():
        a=[]
        a.append('a')
        a.append('b')
        a.append('c')
        return dict(m=a)
Run Code Online (Sandbox Code Playgroud)

(最终这将被一行数据库行替换)目前我正在尝试将m中的值分配给javascript中的数组.我试过几个方法:

var t="{{=m}}";
Run Code Online (Sandbox Code Playgroud)

返回大约43个无意义的字符.然后我尝试了:

var t= new Array(); var i=0;"{{q=0}}"
"{{i=len(message)}}"
i="{{=i}}";
for(q=0;q<i;q++,"{{q=q+1}}"){
t[q]="{{m[q]}}";
}
Run Code Online (Sandbox Code Playgroud)

哪个失败,因为每次循环时python q变量都会重置,这是我问题的核心.我也尝试过使用pop:

for(q=0;q<i;q++,"{{q=q+1}}"){
    alert("{{m.pop()}}");
    }
Run Code Online (Sandbox Code Playgroud)

但是数组在循环开始时会再次重置,因此它会一直显示相同的变量.有没有更简单的方法来复制数组,或停止python变量重置,甚至只是简单地将javascript q变量插入"{{m [q]}}"?

从我发现,问题就来了蟒蛇是服务器端,所以你不能分配的JavaScript值,它的变量,但我不知道是什么与它的循环部分做(如果我做同样的在循环外,值不会重置).常见的解决方案似乎是使用ajax或json,但我想尽可能避免使用它.谢谢

Ant*_*ony 6

在web2py(或任何服务器端模板语言)中,您不能以您的方式将服务器端Python代码与客户端Javascript代码混合在一起.请求页面时,将评估web2py视图中的Python,并生成纯HTML页面(包含Javascript代码)并返回给浏览器.浏览器没有获得任何Python代码,也无法执行Javascript和Python的混合.

web2py视图仅在您拥有时将文本/代码插入页面{{=some_value}}(注意等号).所以,这样的事情{{m[q]}}没有效果.如果您想查看浏览器从web2py接收的内容,请查看浏览器中的页面源代码 - 它将显示您的视图生成的HTML/Javascript的最终结果.

至于您的特定问题,您可以使用response.json()将Python列表转换为JSON对象.但是,如果在视图中包含它,它将转义所有引号,因此您必须将其传递给XML()帮助程序以避免转义.像这样的东西:

var t = {{=XML(response.json(m))}}
Run Code Online (Sandbox Code Playgroud)