2

我想将作为对 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 变量。

4

2 回答 2

2

最安全的方法是将变量作为 HTML5data属性传递,或者在<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>

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

您还可以<script>像这样生成将变量公开为 JavaScript 全局变量的片段,然后直接在 JavaScript 代码中读取全局变量:

<script>
     window.myVar = "${selected}";
</script>     

<script>
     ... code goes here ...
</script>

...但我不建议这样做,因为包含用户输入的变量会使您的网站受到攻击,并且在 HTML 中转义 JavaScript 变量很困难。但是,如果您需要传递多个变量,这很方便——您可以使用json.dumps()Python 字典来生成包含所有变量的 JavaScript 对象。

于 2014-06-02T07:41:30.207 回答
1

采用

var selected=${structure:selected};

并删除

tal define:"selected ${selected}"

在脚本标签中。

于 2014-06-02T19:06:56.100 回答