【问题标题】:How to use tal variable with javascript?如何在 javascript 中使用 tal 变量?
【发布时间】:2014-06-02 07:14:45
【问题描述】:

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

【问题讨论】:

    标签: javascript python templates pyramid chameleon


    【解决方案1】:

    最安全的方法是将变量作为 HTML5 data 属性传递,或者在 &lt;meta&gt; 中的 &lt;head&gt; 中传递。

    <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

    你也可以像这样生成&lt;script&gt;sn-p 将变量暴露为 JavaScript 全局变量,然后直接在你的 JavaScript 代码中读取全局变量:

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

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

    【讨论】:

    • 嘿,我按照你的建议做了,我收到了这个错误 ExpressionError: invalid syntax - String: "${selected}"
    • 如果我在源代码部分的 chrome 开发人员工具中执行此操作 var selected = ${structure:selected} 它会显示 var selected = ["Campaign__c"] 这意味着所选变量正在通过但当我做了一个 console.log(selected) 它显示未定义。
    • 您是在触发文档加载事件后还是在生成 HTML 页面时运行脚本(参见上面的示例)。确保您的脚本标签具有 id my-script 并使用 jQuery 进行检查。
    【解决方案2】:

    使用

    var selected=${structure:selected};
    

    并删除

    tal define:"selected ${selected}"
    

    在脚本标签中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-30
      • 2013-04-08
      • 2011-12-12
      • 2018-08-30
      • 2015-04-19
      相关资源
      最近更新 更多