我似乎无法想出这个。我有一个Python / Django模板,它使用{{variable}}呈现我的变量,我试图在HTML页面上使用Javascript来操作变量,当用户点击一个按钮时。
我看到的问题是Javascript似乎对待{{不同,所以当它呈现为HTML时,它不会转换变量(即它从代码中显示“+ id +”而不是5)下面:
function changeDate()
id = 5;
html = "{{ variable[" + id + "] }}";
document.getElementById('test').innerHTML = html;
我试过像这样转义它们:“{{”并且似乎有效(即它将'id'转换为5)但是Python不会将字符串解释为变量而只显示字符串在页面上{{variable [5]}}而不是该变量的实际值。
我的猜测是因为Javascript在页面已经呈现之后将DIV转换为新文本,因此Python永远不会有机会转换变量当它第一次呈现页面时。
所以我认为有两种可能的解决方案:
或
感谢任何帮助!
答案 0 :(得分:2)
Django的模板渲染只是进行搜索/替换排序: 它获取大括号内的字符串 - 并将该字符串用作键,并将字典传递给它。
它不会尝试将字典值作为数据结构来访问 - 相反,它只是将字符串表示形式化。
所以,
data = {"variable": ["a", "b", "c"] }
可以在dtemplate中检索并命名为“variable” - 但是如果您尝试访问“variable [0]”,渲染模板应该引发NameError - 只是因为“variable [0]”不是关键字上面的数据字典。
处理它的一种方法是将索引部分推迟到客户端上的javascript代码,并在数据字典中传递对象的javascript编码(json)字符串 - 所以你可以做一些事情:
import json
function changeDate()
id = 5
variable = ["bla", "ble", "bli", "blo", "blu", "blew"]
html = """<script> id = {{id}};
document.write({{variable}}[id]);
</script>
"""
data = {"variable": json.dumps(variable), "id": id};
并传递此数据以使用html
模板进行渲染。