如何使用javascript的tal变量?

时间:2014-06-02 07:14:45

标签: javascript python templates pyramid chameleon

我想将作为对zope模板的响应返回的变量传递给金字塔中的javascript变量。

这里是观点代码:

def return_table(request):
selected = request.params.getall("selectedcategories")

return {'selected': selected}

这是模板:

<script tal define:"selected ${selected}">
    var selected = ${selected}
    $.ajax({
        type:"POST",
        url: '/return_table.json?selectedcategories=' + selected,
        async: false,
        success: function (response) {
            console.log(response)
        }
   })
</script>

但这不起作用。我想将selected的值传递给javascript变量。

2 个答案:

答案 0 :(得分:2)

最安全的方法是将变量作为HTML5 data属性传递,或者传递到<meta> <head>内的<script id="my-script" data-selected="${selected}"> $(document).ready(function() { var selected = $("#my-script").attr("data-selected"); $.ajax({ type:"POST", url: '/return_table.json?selectedcategories=' + selected, async: false, success: function (response) { console.log(response) } }) }); </script>

<script>

有关数据属性的更多信息:http://caniuse.com/#feat=dataset

您还可以生成<script> window.myVar = "${selected}"; </script> <script> ... code goes here ... </script> 代码段,将变量公开为这样的JavaScript全局变量,然后直接在JavaScript代码中读取全局变量:

json.dumps()

...但我不建议,因为包含用户输入的变量会打开您的网站以进行攻击并且难以在HTML中转义JavaScript变量。它很方便,如果你需要传递几个变量 - 你可以对Python字典使用{{1}}来生成一个包含所有变量的JavaScript对象。

答案 1 :(得分:1)

使用

var selected=${structure:selected};

并删除

tal define:"selected ${selected}"
脚本标签中的