我想将作为对 zope 模板的响应返回的变量传递到 Pyramid 中的 javascript 变量中。
这是 View 代码:
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 变量。
最安全的方法是将变量作为 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>
有关数据属性的更多信息:http://caniuse.com/#feat=dataset
您还可以生成 <script>
像这样将变量公开为 JavaScript 全局变量的代码片段,然后直接在 JavaScript 代码中读取全局变量:
<script>
window.myVar = "${selected}";
</script>
<script>
... code goes here ...
</script>
...但我不推荐,因为包含用户输入的变量会使您的网站受到攻击,并且很难在 HTML 中转义 JavaScript 变量。不过这很方便,如果你需要传递多个变量——你可以使用 json.dumps()
针对 Python 字典生成包含所有变量的 JavaScript 对象。
我是一名优秀的程序员,十分优秀!