Web2py: json序列化器和javascript有关于python字符串引号的问题



我想要一个复杂的2d列表从python到javascript。Javascript可以很好地处理数字和列表语法(括号和逗号),但它不能理解字符串周围的引号。我已经尝试将列表直接嵌入到代码中,并将其转换为json,但两者都不起作用。我认为问题在于javascript以某种方式将"转换为其他内容,我将在一分钟内展示我的意思。

但是这里有一个重现这个问题的示例代码。

行动:

def problem():
    this_works = [[1,2,5,6.99],[24,55,6.8,124]]
    this_does_not = [["a",5,6,7],["b",8,9,10]]
    return dict(locals())

视图:

{{extend 'layout.html'}}
{{from gluon.serializers import json}}
<p id="test_1">unchanged</p>
<p id="test_2">unchanged</p>
<p id="test_3">unchanged</p>
<script>
    var x;
    x = {{=this_works}};
    document.getElementById("test_1").innerHTML = x;
    var y;
    //y = {{=this_does_not}};
    document.getElementById("test_2").innerHTML = y;
    var z;
    //z = {{=json(this_does_not)}};
    document.getElementById("test_3").innerHTML = z;
</script>

如果这两行中任何一行没有注释,代码就会中断。如果检查html的源代码,您可以看到web2py将"更改为其他内容:

<script>
    var x;
    x = [[1, 2, 5, 6.99], [24, 55, 6.8, 124]];
    document.getElementById("test_1").innerHTML = x;
    var y;
    //y = [[&#x27;a&#x27;, 5, 6, 7], [&#x27;b&#x27;, 8, 9, 10]];
    document.getElementById("test_2").innerHTML = y;
    var z;
    //z = [[&quot;a&quot;, 5, 6, 7], [&quot;b&quot;, 8, 9, 10]];
    document.getElementById("test_3").innerHTML = z;
</script>

出于安全考虑,web2py模板引擎转义模板中插入的所有文本。为了防止这种情况,您应该使用XML()帮助器:

y = {{=XML(this_does_not)}};

最新更新