如何在javascript中使用tal变量?
我想把从zope模板返回的一个变量传递到Pyramid中的一个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>
但是这样不行。我想把选中的值传递给JavaScript变量。
2 个回答
1
使用
var selected=${structure:selected};
并在脚本标签中移除
tal define:"selected ${selected}"
。
2
最安全的方法是通过HTML5的 data
属性来传递变量,或者在 <head>
标签内使用 <meta>
标签。
<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对象。